【发布时间】:2011-10-21 19:03:54
【问题描述】:
这是一个相当简单的问题。当您打印出 LinkedList 时,如下所示:
System.out.println(list);
它打印出来,用方括号将列表括起来,如下所示:
[thing 1, thing 2, thing 3]
有什么方法可以不带方括号打印出来吗?
【问题讨论】:
标签: java collections
这是一个相当简单的问题。当您打印出 LinkedList 时,如下所示:
System.out.println(list);
它打印出来,用方括号将列表括起来,如下所示:
[thing 1, thing 2, thing 3]
有什么方法可以不带方括号打印出来吗?
【问题讨论】:
标签: java collections
是的 - 迭代列表并打印它(每个后面都有逗号,但最后一个元素)。但是,有一些实用工具可以提供帮助:
String result = Joiner.on(", ").join(list);
String result = StringUtils.join(list, ", ");
还有一点需要注意:不要依赖任何对象的.toString() 方法。它不是为了向用户显示对象,或者用作预定义格式 - 它主要用于调试目的。
【讨论】:
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<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
【讨论】:
修改自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(' ');
}
}
【讨论】:
StrBuilder builder = new StrBuilder(); // apache commons lang.
for (Object object : yourList)
{
builder.appendSeperator(", ");
builder.append(object.toString());
}
System.out.println(builder.toString());
【讨论】:
您可以获取.toString() 方法返回的字符串并删除第一个和最后一个字符,或者创建自己的列表类并覆盖.toString() 方法以遍历列表并打印不带括号的元素。或者您可以将其作为匿名类来执行,例如:
List<String> list = new List<String>() {
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 = [I:"James Bond", love:"rock N roll", id:"007"]
println map.collect { k,v -> "$k = $v" }.join('\n')
我 = 詹姆斯邦德
爱 = 摇滚乐
id = 007
【讨论】: