1

有一个这样的结构:

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]

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

================================我改了函数:</p>

@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]]

为什么孩子重复了两次,“,”从哪里来?

4

3 回答 3

5

使用\n代替/n

treeStructure = treeStructure + "--- >" + children.toString() + "\n";
于 2012-05-08T12:43:05.693 回答
2

不要这样做。

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

于 2012-05-08T13:45:52.170 回答
1

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

, 被写是因为它看起来像一个数组。同样的原因是针对 child1 重复的。
改变:

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

至:

treeStructure+"-->"+child.toString()+"\n"
于 2012-05-08T12:43:41.113 回答