附加Java ArrayList StringBuilder

时间:2015-07-08 13:25:08

标签: java arraylist stringbuilder

将List值附加为String时出现一个问题。我将在列表中获得1或超过1的值。然后我需要将这些字符串作为一个字符串追加并为每个字符串使用一个分隔符。但最后还有逗号添加。如何动态地在字符串的末尾删除它。这是我的代码:

cntList = parseXml(metadata.xml);
if (cntList.size() != 0) {
    // entryCountryMap.put(id, country);
    System.out.println("Size is  ---->" + cntList.size());
    StringBuilder sb = new StringBuilder();
    if (cntList.size() >= 2) {
        for (String s : cntList) {
            sb.append(s);
            sb.append(",");
        }
    }
    System.out.println("StringBuilder ----->" + sb.toString());
}

我的输出是这样的:

StringBuilder ----->All Countries,US - United States,

请帮我解决这个问题。谢谢 - Raji

3 个答案:

答案 0 :(得分:5)

使用java 8,它是一个单行

String.join(",", cntList);

如果你需要在连接到单个字符串之前过滤列表的元素和/或改变字符串,你仍然可以在没有循环的情况下以非常简洁的方式进行。

cntList.stream().filter(...).map(...).collect(Collectors.joining(","));

...需要由过滤谓词和映射器替换)

答案 1 :(得分:3)

我会使用普通的for循环。最后一个附加在for循环之外,没有逗号

if (cntList.size() >= 2) {
    for (int i=0;i<cntList.size()-1;i++) {
        sb.append(cntList.get(i));
        sb.append(",");
    }
    sb.append(cntList.get(cntList.size()-1));
}

答案 2 :(得分:1)

只需删除最后一个字符:

StringBuilder sb = new StringBuilder("foo,");
System.out.println(sb.deleteCharAt(sb.length() - 1)); 

<强>输出

foo

更动态地,你可以通过索引查找最后一个逗号并删除以及后面的任何内容:

sb.delete(sb.lastIndexOf(","), sb.length());

正如Pshemo所指出的那样:

sb.setLength(sb.length() - 1);的效果实际上会优于sb.deleteCharAt(sb.length() - 1)