2011-03-18 104 views
2

我必须以String的形式打印列表值。但是我在列表中阻止了[]。这是我的代码。从arraylist中删除[和]

List dbid=new ArrayList(); 
dbid.add(ar.getdbID()); 
String check=ar.getdbID().toString(); 

输出上面的代码:

[2, 3,4]

但我只是需要这样的:

2,3,4
+0

我喜欢斯卡拉的原因之一。 – Nishant 2011-03-18 07:34:03

+0

ar.getdbID()返回什么? – 2011-03-18 07:41:18

回答

0

您可以使用替代String类的方法来删除这些括号,或者你可以使用普通的表达也(我猜正则表达式将在你的情况下矫枉过正)

+2

字符串替换是一个坏主意,因为某些List的成员也可能包含方括号。发布进程String的唯一安全方法是'string.substring(1,string.length() - 1)' – 2011-03-18 08:55:24

7

有 “在列表中的” 无[]。这只是包含这些字符的String表示(由toString()生成)。区分这两件事很重要。

我会使用一个GuavaJoiner

Joiner.on(',').join(dbid); 

你可以手动实现:

StringBuilder b = new StringBuilder(); 
Iterator<?> it = dbid.iterator(); 
while (it.hasNext()) { 
    b.append(it.next()); 
    if (it.hasNext()) { 
    b.append(','); 
    } 
} 
String result = b.toString(); 
+0

不需要dbid.next()。toString(),append(Object)也是一样。否则:+1 – 2011-03-18 07:36:49

+0

@Sean:true,“append(Object)”更好,因为它避免了NPE对'null'值的影响。 – 2011-03-18 07:37:52

+0

Btw你的代码不能编译。看起来像清晨的代码:-) – 2011-03-18 08:21:31

1

喜欢这个:

StringBuilder sb = new StringBuilder(); 
Iterator it = dbid.iterator(); 
if(it.hasNext()){ 
    sb.append(it.next()); 
    while(it.hasNext()){ 
    sb.append(',').append(it.next()); 
    } 
} 
return sb.toString(); 
2

Apache StringUtils join method对这个非常有用的:

StringUtils.join(new String[] { "1", "2", "3"}, ","); 

这将返回字符串 “1,2,3”

+0

还有'join(Collection)'可能更合适,因为他已经有了'List'。 – 2011-03-18 11:58:46

1

的toString()函数将仅仅是对象转换成它的字符串形式。所以它将字符串数组作为字符串打印出来。这就是为什么[]来了。

您必须执行以下操作才能获得所需的结果。

List dbid=new ArrayList(); 
dbid.add(ar.getdbID()); 

String[] checks=ar.getdbID(); 
for(String check:checks) { 
    System.out.print(check+" "); 
} 
System.out.print("\n"); 

希望你明白这个用法。

1
 String pattern = "[\\[\\]]"; 
     String result = yourstring.replaceAll(pattern, ""); 

这是迄今为止我尝试过的最好的选择,它为我工作。 在这种情况下,“yourstring”将是您的字符串对象。

1

我认为最好是遍历整个列表。这样的事情会做的伎俩:

for(int i=0; i<yourList().size();i++){ 
       out.println(yourList().get(i)); 
      } 
+0

您能否详细说明您的答案,并添加关于您提供的解决方案的更多描述? – abarisone 2015-06-17 06:33:02

+0

我同意在这种情况下做一个简单的迭代 - 任何打印所有值的东西都必须遍历整个列表。但是,您正在为每个元素打印整行,而OP要求用逗号分隔。也许你可以添加到你的答案? – 2015-06-17 07:05:41