J'aimerais ajouter des guillemets doubles aux chaînes d'un tableau, puis les joindre plus tard en tant que chaîne unique (en conservant les guillemets). Y at-il une bibliothèque de chaînes qui fait cela? J'ai essayé Apache commons StringUtils.join et la classe Joiner dans Google goyave, mais je n'ai rien trouvé qui ajoute des guillemets.
Mon entrée serait un tableau comme mentionné ci-dessous:
String [] listOfStrings = {"day", "campaign", "imps", "conversions"};
La sortie requise devrait être comme mentionné ci-dessous:
String output = "\"day\", \"campaign\", \"imps\", \"conversions\"";
Je sais que je peux parcourir le tableau et ajouter des citations. Mais je voudrais une solution plus propre s'il en existe une.
Java 8 a Collectors.joining()
et ses surcharges. Il a également String.join
.
Stream
et de Collector
Avec une fonction réutilisable
Function<String,String> addQuotes = s -> "\"" + s + "\"";
String result = listOfStrings.stream()
.map(addQuotes)
.collect(Collectors.joining(", "));
Sans fonction réutilisable
String result = listOfStrings.stream()
.map(s -> "\"" + s + "\"")
.collect(Collectors.joining(", "));
Shortest (un peu hackish, cependant)
String result = listOfStrings.stream()
.collect(Collectors.joining("\", \"", "\"", "\""));
String.join
Très hackish. N'utilisez pas sauf dans une méthode appelée wrapWithQuotesAndJoin
.
String result = listOfString.isEmpty() ? "" : "\"" + String.join("\", \"", listOfStrings) + "\"";
Faites-vous une faveur et utilisez une bibliothèque. Goyave vient immédiatement à l'esprit.
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: toutes les solutions supposent que listOfStrings
est un List<String>
plutôt qu'un String[]
. Vous pouvez convertir un String[]
en List<String>
à l'aide de Arrays.asList(arrayOfStrings)
. Vous pouvez obtenir un Stream<String>
directement à partir d'un String[]
à l'aide de Arrays.stream(arrayOfString)
.
String output = "\"" + StringUtils.join(listOfStrings , "\",\"") + "\"";
Ajoutez les guillemets avec le séparateur, puis ajoutez les guillemets au début et à la fin.
"\"" + Joiner.on("\",\"").join(values) + "\""
Vous pouvez également créer le code pour cette fonctionnalité:
String output = "";
for (int i = 0; i < listOfStrings.length; i++)
{
listOfStrings[i] = "\"" + listOfStrings[i] + "\"";
output += listOfStrings[i] + ", ";
}
Une façon plus générique serait qc. comme:
private static class QuoteFunction<F> {
char quote;
public QuoteFunction(char quote) {
super();
this.quote = quote;
}
Function<F, String> func = new Function<F,String>() {
@Override
public String apply(F s) {
return new StringBuilder(s.toString().length()+2).append(quote).append(s).append(quote).toString();
}
};
public Function<F, String> getFunction() {
return func;
}
}
... appelez-le via la fonction suivante
public static <F> String asString(Iterable<F> lst, String delimiter, Character quote) {
QuoteFunction<F> quoteFunc = new QuoteFunction<F>(quote);
Joiner joiner = Joiner.on(delimiter).skipNulls();
return joiner.join(Iterables.transform(lst, quoteFunc.getFunction()));
}
JDK ne dispose d'aucune méthode permettant de le faire, mais vous pouvez utiliser le Apache Commons LangsStringUtls class, StringUtils.join()
cela fonctionnera
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);
}
Sortie: "jour", "campagne", "imps", "conversions"