使用 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
帮自己一个忙,使用图书馆。 Guava 立即浮现在脑海中。
使用番石榴
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 是List<String> 而不是String[]。您可以使用Arrays.asList(strings) 将String[] 转换为List<String>。您可以使用Arrays.stream(strings) 直接从String[] 获取Stream<String>。
- Java 8+ sn-ps 使用
+ 连接,因为此时+ 通常比StringBuilder 性能更好。
- 旧版本的 sn-ps 使用
StringBuilder 而不是 +,因为它通常在旧版本上更快。