Java - Append quotes to strings in an array and join strings in an array
Solution 1:
With Java 8+
Java 8 has Collectors.joining()
and its overloads. It also has String.join
.
Using a Stream
and a Collector
The naive but effective way
String wrapWithQuotesAndJoin(List<String> strings) {
return strings.stream()
.map(s -> "\"" + s + "\"")
.collect(Collectors.joining(", "));
}
Shortest and probably better performing (somewhat hackish, though)
String wrapWithQuotesAndJoin(List<String> strings) {
return strings.stream()
.collect(Collectors.joining("\", \"", "\"", "\""));
}
Using String.join
Very hackish. Don't use. (but it must be mentioned)
String wrapWithQuotesAndJoin(List<String> strings) {
return strings.isEmpty() ? "" : "\"" + String.join("\", \"", strings) + "\""
}
With older versions of Java
Do yourself a favor and use a library. Guava comes immediately to mind.
Using 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));
}
No libraries
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();
}
Notes:
- All the solutions assume that
strings
is aList<String>
rather than aString[]
. You can convert aString[]
into aList<String>
usingArrays.asList(strings)
. You can get aStream<String>
directly from aString[]
usingArrays.stream(strings)
. - The Java 8+ snippets use the
+
concatenation because at this point+
is usually better performing thanStringBuilder
. - The older-version snippets use
StringBuilder
rather than+
because it's usually faster on the older versions.
Solution 2:
String output = "\"" + StringUtils.join(listOfStrings , "\",\"") + "\"";
Solution 3:
Add the quotes along with the separator and then append the quotes to the front and back.
"\"" + Joiner.on("\",\"").join(values) + "\""