【问题标题】:Java ArrayList StringBuilder appendingJava ArrayList StringBuilder 附加
【发布时间】:2015-07-08 23:23:17
【问题描述】:

将列表值附加为字符串时遇到一个问题。我将在列表中获得 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,

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

【问题讨论】:

标签: java arraylist stringbuilder


【解决方案1】:

对于 java 8,它是一个单行

String.join(",", cntList);

如果您需要在加入单个字符串之前过滤列表的元素和/或改变字符串,您仍然可以以非常简洁的方式完成,而无需循环。

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

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

【讨论】:

  • 不错的一行解决方案+1
  • 没有任何迹象表明正在使用 Java 8。此外,如果 Java 8 可用,String.join() 更适合这种特殊情况。
  • @Simon - 使用 java 6 版本。所以我尝试了另一个有效的解决方案。无论如何,谢谢。
  • 或者,更简洁地说,String.join(",", cntList);。见String.join
【解决方案2】:

我会使用普通的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));
}

【讨论】:

    【解决方案3】:

    只需删除最后一个字符:

    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) 执行得更好。

    【讨论】:

    • 据我记得sb.deleteCharAt(sb.length() - 1) 需要创建没有最后一个元素的旧值的新副本。简单地设置减少构建器的长度会更快sb.setLength(sb.length() - 1);
    • @Pshemo 不错的想法。将添加到答案中。
    • 我不确定你的意思。 setLenght 将调用 ensureCapacityInternal 如果新容量更大,它将尝试扩展数组,但这里不是这种情况,因为我们想减少它。
    猜你喜欢
    • 2012-11-23
    • 2011-12-31
    • 2023-03-06
    • 2018-09-22
    • 2018-07-27
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多