在使用数据库的过程中,我注意到我写了查询字符串,并且在此字符串中,我必须对列表/数组/集合的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查询)变得复杂时。
您的(更多)优雅方式是什么?
注意:这个答案在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): "";