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 a List<String> rather than a String[]. You can convert a String[] into a List<String> using Arrays.asList(strings). You can get a Stream<String> directly from a String[] using Arrays.stream(strings).
  • The Java 8+ snippets use the + concatenation because at this point + is usually better performing than StringBuilder.
  • 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) + "\""