使用 Java 8+
Java 8新增了Collectors.joining()
及其重载方法。同时也有String.join
方法。
使用 Stream
和 Collector
简洁高效的方式
String wrapWithQuotesAndJoin(List<String> strings) {
return strings.stream()
.map(s -> "\"" + s + "\"")
.collect(Collectors.joining(", "));
}
最短且可能性能更好(虽然有点 hackish)
String wrapWithQuotesAndJoin(List<String> strings) {
return strings.stream()
.collect(Collectors.joining("\", \"", "\"", "\""));
}
使用String.join
非常hackish,不建议使用(但必须提到)
String wrapWithQuotesAndJoin(List<String> strings) {
return strings.isEmpty() ? "" : "\"" + String.join("\", \"", strings) + "\""
}
使用旧版本的Java
给自己一个方便,使用一个库。Guava 是首选。
使用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('"');
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+代码段使用
+
连接,因为此时+
通常比StringBuilder
更快。
- 旧版本的代码段使用
StringBuilder
而不是+
,因为在旧版本中它通常更快。
StringUtils.join("\",\"", listOfStrings)
- nmatlistOfStrings
是空的,则打印两个引号 (""
),这在某些情况下是不可接受的。 - Ilya Serbis