如何将换行符添加到多树的 toString 中



有一个这样的结构:

public class TreeNode {
private String key;
private List<TreeNode> children;
    ....

}

我覆盖了 toString() 函数

@Override
public String toString() {
    String treeStructure = "TreeNode [key=" + key +  "]";
    if(children!=null){
        for(TreeNode child:children){
        treeStructure = treeStructure+"--- >"+children.toString()+"/n";
        }
    }
    return treeStructure;
}

然后我测试结果:

public static void main(String[] args) {
    TreeNode node = new TreeNode();
    node.setKey("root");
    List<TreeNode> children = new ArrayList<TreeNode>();
    TreeNode child1 = new TreeNode();
    child1.setKey("child1");
    TreeNode child2 = new TreeNode();
    child2.setKey("child2");
    children.add(child1);
    children.add(child2);
    List<TreeNode> grandchildren = new ArrayList<TreeNode>();
    TreeNode grandchild = new TreeNode();
    grandchild.setKey("grandchild");
    grandchildren.add(grandchild);
    node.setChildren(children);
    child1.setChildren(grandchildren);
    System.out.println(node);
}

但是当我运行它时,输出是:

TreeNode [key=root]--->[TreeNode [key=child1]--->[TreeNode [key=grandchild]]/n, TreeNode [key=child2]]/n--->[TreeNode [key=child1]--->[TreeNode [key=grandchild]]/n, TreeNode [key=child2]]/n

如何在输出中添加换行符,如下所示:

TreeNode [key=root]--->TreeNode [key=child1]--->TreeNode [key=grandchild]
                   --->TreeNode [key=child2]

但是现在孩子1显示了两次,并且没有在结果中添加换行符。

======================================

我更改了功能:

@Override
public String toString() {
    String treeStructure = "TreeNode [key=" + key +  "]";
    if(children!=null){
        for(TreeNode child:children){
        treeStructure = treeStructure+"n"+"-->"+children.toString()+"n";
        }
    }
    return treeStructure;
}

则输出为:

TreeNode [key=root]
--->[TreeNode [key=child1]
--->[TreeNode [key=grandchild]]
, TreeNode [key=child2]]
--->[TreeNode [key=child1]
--->[TreeNode [key=grandchild]]
, TreeNode [key=child2]]

为什么孩子重复两次,","从哪里来?

使用 n 而不是 /n

treeStructure = treeStructure + "--- >" + children.toString() + "n";

不要这样做。

换行符不属于 toString() 方法。 当有人决定创建这些对象的列表或地图时,它们会造成一团糟。 toString() 不应该是一个漂亮的印刷品。 为此使用特定方法,以便它可以具有可靠的输出。 toString() 没有这样的合约来生成格式化的输出。

尝试使用 \r 或与 BufferedWriter 一起使用:BufferedWriter.newLine()

之所以写 ,是因为它被视为一个数组。同样的原因也是孩子1重复。
改变:

treeStructure+"n"+"-->"+children.toString()+"n"

自:

treeStructure+"-->"+child.toString()+"n"

最新更新