繁体   English   中英

将ArrayList的内容输出为逗号分隔的字符串

[英]Output the contents of an ArrayList as a comma-separated String

我试图在Java ArrayList的String表示中添加逗号分隔符,但似乎没有任何效果,显然我缺少一些简单的东西。

可悲的是旧的Java 6(在JSP中运行):

ArrayList zones= new ArrayList();
zones.add(pageContext.getAttribute("zone"));

for(int i=0; i<zones.size(); i++)
out.println(zones.get(i));

// output is   CellA116 CellA116 CellA116 Reception Reception CellA11

StringBuffer stringBuffer = new StringBuffer();
for(int i=0; i<zones.size(); i++)
{
stringBuffer.append(zones.get(i));
stringBuffer.append(",");
}

out.println(stringBuffer.toString());

// output is   CellA116,CellA116,CellA116,Reception,Reception,CellA11,  (commas)

  %>     

</tr>
</c:forEach>

syntax wont work here (outside of loop)
out.println(stringBuffer.substring(0, stringBuffer.length() - 1));

我需要删除最后一个逗号(因为我最终要在chart.js中使用数组),请多加考虑。

一般而言,依靠toString()方法执行此操作是稍后无意中引入错误的简便方法。 如果更改了提供集合的具体类(例如,可能是Set而不是List ),则您假设它以方括号开头和结尾可能是不正确的,并且您的输出可能会更改而没有意识到。

我建议一个更合适的解决方案是遍历Strings的集合并将它们添加到StringBuilder

因此,它可能看起来像:

StringBuilder stringBuilder = new StringBuilder();
for(int i=0; i<strList.size(); i++)
{
    stringBuilder.append(strList.get(i));
    stringBuilder.append(",");
}

// Remove the last character from the StringBuilder to avoid a trailing comma.
String commaSeparatedList = stringBuilder.substring(0, stringBuilder.length() - 1);

out.println(commaSeparatedList);

您可以利用StringBuilder和经典的for循环从List<String>输出csv行。

看看这个:

public static void main(String args[]) {
    List<String> zones = new ArrayList<String>();
    zones.add("CellA116");
    zones.add("CellA116");
    zones.add("CellA116");
    zones.add("Reception");
    zones.add("Reception");
    zones.add("CellA11");

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < zones.size(); i++) {
        if (i < zones.size() - 1) {
            sb.append(zones.get(i)).append(";");
        } else {
            sb.append(zones.get(i));
        }
    }

    System.out.println(sb.toString());
}

输出将如下所示:

CellA116;CellA116;CellA116;Reception;Reception;CellA11

如果要使用带有灵活分隔符char的方法,请使用以下方法:

public static String toSeparatedString(List<String> values, char separator) {
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < values.size(); i++) {
        if (i < values.size() - 1) {
            sb.append(values.get(i)).append(separator);
        } else {
            sb.append(values.get(i));
        }
    }

    return sb.toString();
}

我认为Lino建议不要使用另一个for循环来替换[]和,zone.toString()。replaceAll(“ [\\ [\\] \\ s]”,“”)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM