Java:打印链接列表没有方括号?

时间:2011-10-21 19:03:54

标签: java collections

这是一个相当简单的问题。当您打印出LinkedList时,如下所示:

System.out.println(list);

它打印出来,围绕方括号中的列表,如下所示:

[thing 1, thing 2, thing 3]

有没有方法可以在没有方括号的情况下将其打印出来?

8 个答案:

答案 0 :(得分:21)

是 - 迭代列表并打印它(在每个之后使用逗号,但是最后一个元素)。但是,有一些工具可以提供帮助:

Guava

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

commons-lang

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

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

答案 1 :(得分:5)

快速而肮脏的答案是:

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

答案 2 :(得分:2)

您可以继承LinkedList并覆盖它的toString()方法,但这似乎有些过分。相反,迭代它的元素并使用StringStringBuilder构建StringBuffer(如果并发是一个问题)。

注意:
我建议你不要按照@Sean Owen提供的答案,因为这是依赖于实现的,因此很脆弱。

答案 3 :(得分:0)

这是LinkedList上toString()的默认实现。您可以扩展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

答案 4 :(得分: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(' ');
       }
   }

答案 5 :(得分:0)

StrBuilder builder = new StrBuilder(); // apache commons lang.
for (Object object : yourList)
{
  builder.appendSeperator(", ");
  builder.append(object.toString());
}

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

答案 6 :(得分:0)

您可以获取.toString()方法返回的字符串并删除第一个和最后一个字符,或者创建自己的列表类并覆盖.toString()方法以遍历列表并打印元素而不用括号。或者你可以像匿名课一样:

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

当然,我太慢了。

答案 7 :(得分:0)

如果您进入 groovy ,则无需导入任何内容,只需执行以下操作:

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')
  

我=詹姆斯邦德

     

love = rock N roll

     

id = 007