Java:打印LinkedList没有方括号?
这是一个相当简单的问题。 当您打印出LinkedList时,如下所示:
System.out.println(list);
它打印出来,围绕方括号中的列表,如下所示:
[thing 1, thing 2, thing 3]
有没有方法可以在没有方括号的情况下将其打印出来?
是 – 迭代列表并打印它(在每个之后使用逗号,但是最后一个元素)。 但是,有一些工具可以帮助:
番石榴 :
String result = Joiner.on(", ").join(list);
commons-lang :
String result = StringUtils.join(list, ", ");
还有一点需要注意:不要依赖任何对象的.toString()
方法。 它不是用于向用户显示对象,也不是用作预定义格式 – 主要用于调试目的。
一个快速而肮脏的答案是:
String s = list.toString(); System.out.println(s.substring(1, s.length()-1));
你可以LinkedList
并覆盖它的toString()
方法,但这看起来有点过分。 相反,迭代它的元素并使用StringBuilder
或StringBuffer
构造String
(如果并发是一个问题)。
注意:
我建议你不要按照@Sean Owen提供的答案,因为那是依赖于实现的,因此很脆弱。
这是LinkedList上toString()的默认实现。 您可以扩展LinkedList以提供您自己的实现或使用组合,并只实现java.util.List接口。
public class MyLinkedList implements List { private final List delegate; public MyLinkedList(List list) { delegate = list; } /** * @return see overriden class or implemented interface * @see java.lang.Object#toString() */ @Override public String toString() { return "My special toString() method"; } // implement rest of the java.util.List interface
从AbstractCollection.java
修改:
/* * @return a string representation of a collection */ public static final String collectionToString(Collection c) { Iterator it = c.iterator(); if (! it.hasNext()) return ""; StringBuilder sb = new StringBuilder(); for (;;) { E e = it.next(); sb.append(e == c ? "(this Collection)" : e); if (! it.hasNext()) return sb.toString(); sb.append(',').append(' '); } }
StrBuilder builder = new StrBuilder(); // apache commons lang. for (Object object : yourList) { builder.appendSeperator(", "); builder.append(object.toString()); } System.out.println(builder.toString());
您可以获取.toString()
方法返回的String并删除第一个和最后一个字符,或者创建自己的列表类并覆盖.toString()
方法以遍历列表并打印不带括号的元素。 或者您可以将其作为匿名类来执行,例如:
List list = new List () { public String toString() { // Custom To String Stuff Here } };
当然,我太慢了。
如果你是groovy ,没有必要导入任何东西,只需:
list = ["thing 1", "thing 2", "thing 3"] println list.collect { i -> "$i" }.join(', ')
东西1,东西2,东西3
与Map集合相同:
map = [I:"James Bond", love:"rock N roll", id:"007"] println map.collect { k,v -> "$k = $v" }.join('\n')
我=詹姆斯邦德
love = rock N roll
id = 007