web-dev-qa-db-fra.com

Java - Séparer et tailler d'un coup

J'ai une chaîne comme ceci: String attributes = " foo boo, faa baa, fii bii," Je veux obtenir un résultat comme celui-ci:

String[] result = {"foo boo", "faa baa", "fii bii"};

Donc, mon problème est de savoir comment faire pour scinder et couper en un coup je me suis déjà séparé:

String[] result = attributes.split(",");

Mais la spaces reste dans le résultat:

String[] result = {" foo boo", " faa baa", " fii bii"};
                    ^           ^           ^

Je sais que nous pouvons faire une boucle et rendre trim pour chaque, mais je veux le faire en coup.

24
YCF_L

Utilisez l'expression régulière \s*,\s* pour le fractionnement.

String result[] = attributes.split("\\s*,\\s*");

Pour les espaces blancs initiaux et suivants
La solution précédente laisse encore des espaces vides. Donc, si nous en attendons un, nous pouvons utiliser la solution suivante pour le supprimer:

String result[] = attributes.trim().split("\\s*,\\s*");
47
Raman Sahasi

En utilisant Java 8, vous pouvez le faire comme ceci en une seule ligne

String[] result = Arrays.stream(attributes.split(",")).map(String::trim).toArray(String[]::new);
21
Andrei Olar

S'il n'y a pas de texte entre les virgules, l'expression suivante ne créera pas d'éléments vides:

String result[] = attributes.trim().split("\\s*,+\\s*,*\\s*");
1
Maxple
String result[] = attributes.trim().split("\\s*,[,\\s]*");

précédemment posté ici: https://blog.oio.de/2012/08/23/split-comma-separated-strings-in-Java/

0
Dmitriy Pichugin

Et si vous sépariez par virgule et espace?

String result[] = attributes.split(",\\s");

créez votre propre fonction personnalisée

private static String[] split_and_trim_in_one_shot(String string){
 String[] result  = string.split(",");
 int array_length = result.length;

 for(int i =0; i < array_length ; i++){
  result[i]=result[i].trim();
 }
 return result;

Surcharge avec une considération pour le délimiteur personnalisé 

private static String[] split_and_trim_in_one_shot(String string, String delimiter){
 String[] result  = string.split(delimiter);
 int array_length = result.length;

 for(int i =0; i < array_length ; i++){
  result[i]=result[i].trim();
 }
 return result;
0
TimeTrax