I would like to append double quotes to strings in an array and then later join them as a single string (retaining the quotes). Is there any String library which does this?
String output = "\"" + StringUtils.join(listOfStrings , "\",\"") + "\"";
You can create the code for this functionality yourself as well:
String output = "";
for (int i = 0; i < listOfStrings.length; i++)
{
listOfStrings[i] = "\"" + listOfStrings[i] + "\"";
output += listOfStrings[i] + ", ";
}
public static void main(String[] args) {
// TODO code application logic here
String [] listOfStrings = {"day", "campaign", "imps", "conversions"};
String output = "";
for (int i = 0; i < listOfStrings.length; i++) {
output += "\"" + listOfStrings[i] + "\"";
if (i != listOfStrings.length - 1) {
output += ", ";
}
}
System.out.println(output);
}
Output: "day", "campaign", "imps", "conversions"
Java 8 has Collectors.joining() and its overloads. It also has String.join.
Stream
and a Collector
With a reusable function
Function<String,String> addQuotes = s -> "\"" + s + "\"";
String result = listOfStrings.stream()
.map(addQuotes)
.collect(Collectors.joining(", "));
Without any reusable function
String result = listOfStrings.stream()
.map(s -> "\"" + s + "\"")
.collect(Collectors.joining(", "));
Shortest (somewhat hackish, though)
String result = listOfStrings.stream()
.collect(Collectors.joining("\", \"", "\"", "\""));
String.join
Very hackish. Don't use except in a method called wrapWithQuotesAndJoin
.
String result = listOfString.isEmpty() ? "" : "\"" + String.join("\", \"", listOfStrings) + "\"";
Do yourself a favor and use a library. Guava comes immediately to mind.
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 result = Joiner.on(", ").join(Iterables.transform(listOfStrings, addQuotes));
String result;
if (listOfStrings.isEmpty()) {
result = "";
} else {
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();
}
Note: all the solutions assume that listOfStrings
is a List<String>
rather than a String[]
. You can convert a String[]
into a List<String>
using Arrays.asList(arrayOfStrings)
. You can get a Stream<String>
directly from a String[]
using Arrays.stream(arrayOfString)
.
Add the quotes along with the separator and then append the quotes to the front and back.
"\"" + Joiner.on("\",\"").join(values) + "\""
There is no method present in JDK which can do this, but you can use the Apache Commons Langs StringUtls class , StringUtils.join()
it will work