有一个这样的结构:
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"