Java字符串拼接

4

我有一个字符串列表,现在想将列表转换为以逗号(,)分隔的字符串。是使用concat方法唯一的方法还是有其他更简单、更好的方法?

StringBuilder s = null;
List<String> listObjs (5 strings in it)
for(String listObj : listObjs)
s.append(listObj);
s.append(",");

编辑:SO 的伙计们真是太棒了……我在几秒钟内就得到了一大堆答案,哇!!


1
我认为你应该使用StringBuilder(正如多次提到的那样)来进行这种字符串操作。 - Less
7个回答

12
你可以这样做。
StringBuilder sb = new StringBuilder();
String sep = "";
for (String s : listObjs) {
    sb.append(sep).append(s);
    sep = ", ";
}
System.out.println(sb);

不确定这是否比布尔检查更高效(可能是以纳秒计算的!) - assylias
4
@assylias,这段话比较短。 ;) 当第一个"sep"不为空时,如 String sep = "[ ";,它很有用。 - Peter Lawrey

5

0
使用 StringBuilder
StringBuilder sb = new StringBuilder();
for (String obj : listObjs) {
    sb.append(String.format("%s,", obj));
    //or without format
    //sb.append(obj).append(",");
}
sb.deleteCharAt(sb.length()-1); // The last ","
System.out.println(sb.toString());

你需要删除末尾的逗号。 - assylias
格式相对昂贵。你真的想要一个尾随的“,”吗? - Peter Lawrey

0

确实需要使用StringBuilder

StringBuilder sb = new StringBuilder();
for (String string : listObjs) {
    sb.append(string);
    sb.append(", ");
}
// Remove the dangling ", "
int length = sb.length();
sb.delete(length - 2, length);

String combined = sb.toString();

0

concat() 不会修改你的 s 引用(顺便提一下,s 是 null,所以你应该期望 NullPointerException 出现在 s.concat() 中)。你应该使用 "" 初始化 s,然后使用 s = s.concat(other) 或者 s += other 进行字符串拼接。或者更好的方式是使用 StringBuilder,它对于这种用途更加高效:

StringBuilder sb = new StringBuilder();
for (String obj : objList) {
    if (sb.length() == 0) {
        sb.append(',');
    }
    sb.append(obj);
}

谢谢提供这个信息...虽然我在理论上知道,但你让我在实践中有了更深的认识。 - lowLatency

0

使用concat不是一个好主意,因为它会在每个循环中创建一个新的字符串。相比之下,您可以使用StringBuilder,从内存角度来看更有效率。

public static String getCsvFrom(java.util.Collection<?> objects) {
    if (objects == null || objects.isEmpty()) {
        return "";
    }
    StringBuilder s = new StringBuilder();
    boolean firstLoop = true;
    for (Object o : objects) {
        if (!firstLoop) {
            s.append(",");
        } else {
            firstLoop = false;
        }
        s.append(o);
    }
    return s.toString();
}

0

我想知道为什么你还没有尝试过这个:

String str = "";
str += listObjs.get(0);
for (int i = 1; i < listObjs.size() - 1; i++ ) {
    str += "," + listObjs.get(i);
}
str += listObjs.get(listObjs.size() - 1);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接