2011-10-21 182 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