web-dev-qa-db-fra.com

Imprimer les éléments d'un tableau avec une virgule entre les éléments sauf le dernier mot

J'imprime des éléments d'une liste de tableaux, je veux avoir une virgule entre chaque mot sauf le dernier mot. En ce moment je fais comme ça: 

    for (String s : arrayListWords) {
         System.out.print(s + ", ");
    }

Comme vous le comprenez, les mots comme ceci seront imprimés: "un, deux, trois, quatre" Et le problème est la dernière virgule, comment puis-je résoudre ce problème? Toutes les réponses appréciées!

Cordialement, Erica

13
Eri.

Imprimer le premier mot seul s'il existe. Imprimez ensuite le motif par virgule, puis l’élément suivant.

if (arrayListWords.length >= 1) {
    System.out.print(arrayListWords[0]);
}

// note that i starts at 1, since we already printed the element at index 0
for (int i = 1; i < arrayListWords.length, i++) { 
     System.out.print(", " + arrayListWords[i]);
}

Avec un List, il vaut mieux utiliser un Iterator

// assume String
Iterator<String> it = arrayListWords.iterator();
if (it.hasNext()) {
    System.out.print(it.next());
}
while (it.hasNext()) {
    System.out.print(", " + it.next());
}
23

Je l'écrirais ainsi:

String separator = "";  // separator here is your ","

for (String s : arrayListWords) {
    System.out.print(separator + s);
    separator = ",";
}

Si arrayListWords a deux mots, il devrait afficher A, B 

13
Mav

Utilisation de Java 8 Streams:

Stream.of(arrayListWords).collect(Collectors.joining(", "));
7
Camilo Silva

En itérant, vous pouvez ajouter le String s à la StringBuilder et à la fin, vous pouvez supprimer les 2 derniers caractères, qui sont un , supplémentaire et un espace (res.length() -2).

StringBuilder res = new StringBuilder();
for (String s : arrayListWords) {
    res.append(s).append(", ");
}
System.out.println(res.deleteCharAt(res.length()-2).toString());
3
sanbhat
StringJoiner str = new StringJoiner(", ");
str.add("Aplha").add("Beta").add("Gamma");

String result = str.toString();
System.out.println("The result is: " + result);

La sortie: [.______.] Le résultat est: Alpha, Beta, Gamma

3
Asparuh

Vous pouvez utiliser une fonction standard dans le package Java.util et supprimer les guillemets au début et à la fin.

String str = Java.util.Arrays.toString(arrayListWords);
str = str.substring(1,str.length()-1);
System.out.println(str);
1
akkerman

Avec Java 8, c'est devenu beaucoup plus facile, pas besoin de tierces parties - 

final List<String> words = Arrays.asList("one", "two", "three", "four");
String wordsAsString = words.stream().reduce((w1, w2) -> w1 + "," + w2).get();
System.out.println(wordsAsString);
0
Lital Kolog

Vous pouvez utiliser une Iterator sur la List pour vérifier s'il y a plus d'éléments.

Vous pouvez ensuite ajouter la virgule uniquement si l'élément en cours n'est pas le dernier élément.

public static void main(String[] args) throws Exception {
    final List<String> words = Arrays.asList(new String[]{"one", "two", "three", "four"});

    final Iterator<String> wordIter = words.iterator();
    final StringBuilder out = new StringBuilder();
    while (wordIter.hasNext()) {
        out.append(wordIter.next());
        if (wordIter.hasNext()) {
            out.append(",");
        }
    }
    System.out.println(out.toString());
}

Cependant, il est beaucoup plus facile d'utiliser une bibliothèque tierce telle que Guava pour le faire pour vous. Le code devient alors:

public static void main(String[] args) throws Exception {
    final List<String> words = Arrays.asList(new String[]{"one", "two", "three", "four"});
    System.out.println(Joiner.on(",").join(words));
}
0
Boris the Spider

Tu peux essayer ça

    List<String> listWords= Arrays.asList(arrayListWords); // convert array to List
    StringBuilder sb=new StringBuilder();
    sb.append(listWords);
    System.out.println(sb.toString().replaceAll("\\[|\\]",""));
0

Cela peut constituer le moyen le plus efficace de chaîne délimitée par des virgules utilisant les meilleures pratiques et l'absence de contrôle "si", de bibliothèques inconnues et de StringBuilder qui constitue la meilleure pratique pour la concaténation de chaînes.

De plus, le fait d'avoir une variable "taille" réduit les appels à la méthode .size().

Pour ceux qui utilisent String[]:

StringBuilder str = new StringBuilder();
String[] strArr = {"one", "two", "three", "four"};
int size = strArr.length;
str.append(strArr[0]);
for (int i = 1; i < size; i++) {
    str.append(",").append(strArr[i]);
}
System.out.println(str.toString());

Pour ceux qui utilisent ArrayList<String>:

StringBuilder str = new StringBuilder();
List<String> strArr = Arrays.asList(new String[]{"one", "two", "three", "four"});
int size = strArr.size();
str.append(strArr.get(0));
for (int i = 1; i < size; i++) {
    str.append(",").append(strArr.get(i));
}
System.out.println(str.toString());

Les deux donnent: one,two,three,four

0
lewdev

Utilisez simplement la méthode toString ().

String s = arrayListWords.toString();
System.out.println(s);

//This will print it like this: "[one, two, three, four]"
//If you want to remove the brackets you can do so easily. Just change the way you print.
0
Rohit

Voici ce que je viens avec: 

String join = "";

// solution 1
List<String> strList = Arrays.asList(new String[] {"1", "2", "3"});
for(String s: strList) {
   int idx = strList.indexOf(s);
   join += (idx == strList.size()-1) ? s : s + ",";
}
System.out.println(join);

// solution 2 
join = "";
for(String s: strList) {    
   join += s + ",";
}

join = join.substring(0, join.length()-1);
System.out.println(join);

// solution 3  
join = "";
int count = 0;
for(String s: strList) {    
   join += (count == strlist.size()-1) ? s: s + ",";
   count++;
}

System.out.println(join);

bien sûr, nous pouvons utiliser StringBuilder mais de toutes les solutions, j'aime @Mav répondre car c'est plus efficace et plus propre. 

0
Simple-Solution