web-dev-qa-db-fra.com

Java - Ajoute des guillemets aux chaînes d'un tableau et joint des chaînes d'un tableau

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.

32
Anand

Avec Java 8+

Java 8 a Collectors.joining() et ses surcharges. Il a également String.join .

Utilisation de 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("\", \"", "\"", "\""));

Utiliser String.join

Très hackish. N'utilisez pas sauf dans une méthode appelée wrapWithQuotesAndJoin.

String result = listOfString.isEmpty() ? "" : "\"" + String.join("\", \"", listOfStrings) + "\"";

Avec les anciennes versions de Java

Faites-vous une faveur et utilisez une bibliothèque. Goyave vient immédiatement à l'esprit.

Utilisation de goyave

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));

Pas de bibliothèques

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).

77
Olivier Grégoire
String output = "\"" + StringUtils.join(listOfStrings , "\",\"") + "\"";
8
Sifeng

Ajoutez les guillemets avec le séparateur, puis ajoutez les guillemets au début et à la fin.

"\"" + Joiner.on("\",\"").join(values) + "\""
2
Kevin Peterson

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] + ", ";
}
0
bas

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()));
}
0
John Rumpel

JDK ne dispose d'aucune méthode permettant de le faire, mais vous pouvez utiliser le Apache Commons LangsStringUtls class, StringUtils.join() cela fonctionnera 

0
Himanshu Mishra
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"

0
Sommes