有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java ArrayList StringBuilder附加

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

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


共 (3) 个答案

  1. # 1 楼答案

    我会使用普通的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. # 2 楼答案

    只需删除最后一个字符:

    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)表现更好

  3. # 3 楼答案

    对于Java8,它是一个单行程序

    String.join(",", cntList);
    

    如果在连接到单个字符串之前需要过滤列表中的元素和/或对字符串进行变异,仍然可以以非常简洁的方式完成,而不需要循环

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

    (需要用过滤谓词和映射器替换...