我试图在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中使用数组),请多加考虑。
答案 0 :(得分:2)
通常来说,依靠toString()
方法来执行此操作是稍后无意中引入错误的简便方法。如果您更改了提供集合的具体类(例如,可能是Set
而不是List
),则您假设它以方括号开头和结尾的假设可能是不正确的,并且您的输出可能会更改没有意识到。
我建议一种更合适的解决方案是遍历字符串的集合并将其添加到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);
答案 1 :(得分:2)
您可以利用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();
}
答案 2 :(得分:-2)
我认为Lino建议不要使用另一个for循环来替换[]和,zone.toString()。replaceAll(“ [\ [\] \ s]”,“”)。