使用 Java 8+
Java 8 具有Collectors.joining()
及其重载。它也有String.join
。
使用一个Stream
和一个Collector
幼稚但有效的方法
String wrapWithQuotesAndJoin(List<String> strings) {
return strings.stream()
.map(s -> "\"" + s + "\"")
.collect(Collectors.joining(", "));
}
最短且性能可能更好(虽然有点骇人听闻)
String wrapWithQuotesAndJoin(List<String> strings) {
return strings.stream()
.collect(Collectors.joining("\", \"", "\"", "\""));
}
使用String.join
非常骇人听闻。不要使用。(但必须提到)
String wrapWithQuotesAndJoin(List<String> strings) {
return strings.isEmpty() ? "" : "\"" + String.join("\", \"", strings) + "\""
}
使用旧版本的 Java
帮自己一个忙,使用图书馆。番石榴立刻浮现在脑海中。
使用番石榴
private static final Function<String,String> addQuotes = new Function<String,String>() {
@Override public String apply(String s) {
return new StringBuilder(s.length()+2).append('"').append(s).append('"').toString();
}
};
String wrapWithQuotesAndJoin(List<String> strings) {
return Joiner.on(", ").join(Iterables.transform(listOfStrings, addQuotes));
}
没有图书馆
String wrapWithQuotesAndJoin(List<String> strings) {
if (listOfStrings.isEmpty()) {
return "";
}
StringBuilder sb = new StringBuilder();
Iterator<String> it = listOfStrings.iterator();
sb.append('"').append(it.next()).append('"'); // Not empty
while (it.hasNext()) {
sb.append(", \"").append(it.next()).append('"');
}
result = sb.toString();
}
备注:
- 所有解决方案都假定它
strings
是 aList<String>
而不是 a String[]
。您可以将 aString[]
转换为List<String>
using Arrays.asList(strings)
。您可以Stream<String>
直接从String[]
using中获取 a Arrays.stream(strings)
。
- Java 8+ 代码片段使用
+
连接,因为此时+
通常比StringBuilder
.
- 旧版本的代码片段使用
StringBuilder
而不是+
因为它通常在旧版本上更快。