2011-10-21 138 views
7

这是一个相当简单的问题。当你打印出一个LinkedList,像这样:Java:打印没有方括号的LinkedList?

System.out.println(list); 

它打印出来,周围像这样的方括号中的列表:

[thing 1, thing 2, thing 3] 

有没有一种方法,我可以把它打印出来,而不广场括号?

回答

21

是 - 迭代列表并打印它(每个之后都有逗号,但最后一个元素)。不过,也有utils的帮助:

Guava

String result = Joiner.on(", ").join(list); 

commons-lang

String result = StringUtils.join(list, ", "); 

还有一注:不依赖于任何对象的方法.toString()。它并不意味着向用户显示对象,或者用作预定义的格式 - 主要用于调试目的。

+1

这个需要+2的实用工具和'toString()'位。 –

+0

什么是StringUtils的导入? – Blackvein

+0

没关系我找到了:)谢谢你们! – Blackvein

5

快速和肮脏的答案是:

String s = list.toString(); 
System.out.println(s.substring(1, s.length()-1)); 
+2

由于包含的是 “快速和肮脏的” 免责声明,我不会降低你的答案。这就是说,这正是我们应该阻止其他开发者做的事情的类型。 –

0

这是的toString()上的LinkedList的默认实现。您可以扩展LinkedList以提供您自己的实现或使用组合,并只实现java.util.List接口。

public class MyLinkedList<E> implements List<E> 
{ 
    private final List<E> delegate; 

    public MyLinkedList(List<E> 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 
2

你可以继承LinkedList并重写它的toString()方法,但似乎有点过分。相反,遍历它的元素并使用StringBuilderStringBuffer(如果并发是一个问题)构造String

注:
我建议你不要遵循@Sean Owen提供的答案,因为这是实现相关的,因此,脆弱的。

0

AbstractCollection.java修改:

/* 
    * @return a string representation of a collection 
    */ 
    public static final String collectionToString(Collection c) { 
     Iterator<E> 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(' '); 
     } 
    } 
0
StrBuilder builder = new StrBuilder(); // apache commons lang. 
for (Object object : yourList) 
{ 
    builder.appendSeperator(", "); 
    builder.append(object.toString()); 
} 

System.out.println(builder.toString()); 
0

你可以抓住由.toString()方法返回的字符串并删除第一个和最后一个字符,或使自己的列表类并覆盖.toString()方法来遍历列表并打印没有括号的元素。或者你可以像一个匿名类:

List<String> list = new List<String>() { 
    public String toString() { 
     // Custom To String Stuff Here 
    } 
}; 

当然,我太慢了。

0

如果你到常规,就没有必要进口什么,只是做:

list = ["thing 1", "thing 2", "thing 3"]  
println list.collect { i -> "$i" }.join(', ') 

件事1,东西2,东西3


同图集合:

map = [I:"James Bond", love:"rock N roll", id:"007"] 
println map.collect { k,v -> "$k = $v" }.join('\n') 

I =詹姆斯·邦德

爱=摇滚乐

ID = 007