Java 以逗号分隔的字符串形式输出ArrayList的内容

Java 以逗号分隔的字符串形式输出ArrayList的内容,java,Java,我试图在Java ArrayList的字符串表示中添加逗号分隔符,但似乎没有任何效果,我显然缺少一些简单的东西 遗憾的是,旧的Java 6(在JSP中运行): ArrayList zones=new ArrayList(); 添加(pageContext.getAttribute(“zone”); 对于(int i=0;i一般来说,依靠toString()方法来实现这一点很容易在以后无意中引入错误。如果更改提供集合的具体类(例如,可能是一个集合,而不是一个列表),您认为它以方括号开始和结束的假设

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

遗憾的是,旧的Java 6(在JSP中运行):

ArrayList zones=new ArrayList();
添加(pageContext.getAttribute(“zone”);

对于(int i=0;i一般来说,依靠
toString()
方法来实现这一点很容易在以后无意中引入错误。如果更改提供集合的具体类(例如,可能是一个
集合,而不是一个
列表
),您认为它以方括号开始和结束的假设可能是不真实的,您的输出可能会在您没有意识到的情况下发生变化

我建议更合适的解决方案是迭代字符串集合并将它们添加到
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 StringBuilder=新建StringBuilder();

对于(int i=0;i您可以使用
StringBuilder
和经典的
for
循环从
列表中输出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());
}
如果您想要一个具有灵活分隔符
char
的方法,那么请使用如下内容:

CellA116;CellA116;CellA116;Reception;Reception;CellA11
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();
}
公共静态字符串到分离字符串(列表值、字符分隔符){
StringBuilder sb=新的StringBuilder();
对于(int i=0;i
我认为不需要另一个for循环来替换[]和,zones.toString().replaceAll([\[\]\s],“”)由Lino建议的效果很好。

zones.toString().replaceAll([\[\]\\s],“”)
?如果您可以使用Java 8,请看以下内容:查看这个答案,它也解决了JSp上下文:可能与我将其更改为StringBuffer的结果相同,并且似乎可以工作(包括逗号)但子字符串尝试删除所有逗号
StringBuffer
也应该可以-有关差异的信息,请参阅的第一行。哦!您需要将
.substring
行置于循环之外(即循环完成后)再次感谢,这个循环是一个jstl c:forEach循环,所以我必须弄清楚如何在这个循环之外执行子字符串只是一些提示,在jsp forEach中,我想有一种方法可以获取循环的当前计数,如果计数不等于列表的大小,请附加逗号。因此,最后一个逗号不会显示谢谢,但如果(i列表的
if
语句。该语句只确定当前处理的
字符串是否是最后一个字符串,如果是,则不会有尾随分隔符。这是它的唯一用途。
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();
}