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()方法,但这看起来有点过分。 相反,迭代它的元素并使用StringBuilderStringBuffer构造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