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

2022-08-31 10:23:48

在我使用数据库的过程中,我注意到我编写查询字符串,并且在此字符串中,我必须在列表/数组/集合的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查询)变得越来越复杂时。

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


答案 1

使用谷歌番石榴API加入方法:

Joiner.on(",").join(collectionOfStrings);

答案 2

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


由于字符串是不可变的,因此如果要更改代码中的字符串,则可能需要使用 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): "";