一尘不染

从集合/数组/列表创建逗号分隔的字符串的最复杂的方法?

java

在使用数据库的过程中,我注意到我写了查询字符串,并且在此字符串中,我必须对列表/数组/集合的where子句施加一些限制。应该看起来像这样:

select * from customer 
where customer.id in (34, 26, ..., 2);

您可以通过将其简化为以下问题来简化此问题:您具有字符串集合,并且只想在一个字符串中创建一个用逗号分隔的字符串列表。

到目前为止,我使用的方法是这样的:

String result = "";
boolean first = true;
for(String string : collectionOfStrings) {
    if(first) {
        result+=string;
        first=false;
    } else {
        result+=","+string;
    }
}

但这就像您看到的非常难看。您不会一眼就看到发生了什么,尤其是当构造的字符串(如每个SQL查询)变得复杂时。

您的(更多)优雅方式是什么?


阅读 183

收藏
2020-09-09

共1个答案

一尘不染

注意:这个答案在11年前写的时候是不错的,但是现在有更好的选择可以更清晰地在一行中执行此操作,无论是仅使用Java内置类还是使用实用程序库。请参阅下面的其他答案。


由于字符串是不可变的,因此如果要在代码中更改String,则可能要使用StringBuilder类。

可以将StringBuilder类视为一个可变的String对象,当其内容更改时,该对象分配更多的内存。

通过处理 多余的结尾逗号 ,可以更清楚,更有效地写出问题中的原始建议:

    StringBuilder result = new StringBuilder();
    for(String string : collectionOfStrings) {
        result.append(string);
        result.append(",");
    }
    return result.length() > 0 ? result.substring(0, result.length() - 1): "";
2020-09-09