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
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());
}
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
Utilisation de Java 8 Streams:
Stream.of(arrayListWords).collect(Collectors.joining(", "));
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());
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
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);
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);
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));
}
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("\\[|\\]",""));
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
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.
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.