Question

Quel modèle de regex aurait besoin que je transmette à la méthode java.lang.String.split () pour scinder une chaîne en un tableau de sous-chaînes utilisant tous les caractères d'espacement ('', '' ',' \ n ', etc.) comme délimiteurs?

Était-ce utile?

La solution

Quelque chose dans les lignes de

myString.split("\\s+");

Ceci regroupe tous les espaces blancs en tant que délimiteur.

Donc si j'ai la chaîne:

"Bonjour [espace] [tab] Monde"

Ceci devrait générer les chaînes "Bonjour" et "Monde" et omettre l'espace vide entre [espace] et le [tab] .

Comme l'a souligné VonC, la barre oblique inversée doit être échappée, car Java tentera d'abord d'échapper la chaîne à un caractère spécial et enverra celui-ci à analyser. Ce que vous voulez, c'est le "\ s" littéral, ce qui signifie que vous devez passer "\\ s" . Cela peut devenir un peu déroutant.

Le \\ s équivaut à [\\ t \\ n \\ x0B \\ f \\ r]

Autres conseils

Dans la plupart des dialectes regex, il existe un ensemble de résumés de caractères pratiques que vous pouvez utiliser pour ce genre de choses. Ce sont de bons exemples à retenir:

\ w - Correspond à n'importe quel caractère de mot.

\ W - Correspond à tout caractère non-mot.

\ s - Correspond à tout caractère d'espace blanc.

\ S - Correspond à autre chose qu'aux caractères d'espacement.

\ d - Correspond à n'importe quel chiffre.

\ D - Correspond à tout sauf aux chiffres.

Une recherche sur "Regex Cheatsheets". devrait vous récompenser avec beaucoup de résumés utiles.

Pour que cela fonctionne en Javascript , je devais procéder comme suit:

myString.split(/\s+/g)

" \\ s + " devrait faire l'affaire

Vous pouvez aussi avoir un espace insécable UniCode xA0 ...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
String string = "Ram is going to school";
String[] arrayOfString = string.split("\\s+");

Apache Commons Lang a une méthode pour diviser une chaîne avec des caractères d'espacement en tant que délimiteurs:

StringUtils.split("abc def")

http: //commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#split(java.lang.String)

Cela pourrait être plus facile à utiliser qu'un motif regex.

Puisqu'il s'agit d'une expression régulière et que je suppose que vous ne voudriez pas non plus de caractères non alphanumériques comme des virgules, des points, etc., qui pourraient être entourés par des espaces (par exemple, "un, deux" devrait donner [un] [ deux]), il devrait être:

myString.split(/[\s\W]+/)

Je suis surpris que personne n'ait mentionné String.split () sans paramètre. N'est-ce pas ce pour quoi il est fait? comme dans:

"abc def ghi".split()

vous pouvez fractionner une chaîne par un retour à la ligne en utilisant l'instruction suivante:

 String textStr[] = yourString.split("\\r?\\n");

vous pouvez diviser une chaîne par un espace en utilisant l'instruction suivante:

String textStr[] = yourString.split("\\s+");
String str = "Hello   World";
String res[] = str.split("\\s+");

Étudiez ce code .. bonne chance

    import java.util.*;
class Demo{
    public static void main(String args[]){
        Scanner input = new Scanner(System.in);
        System.out.print("Input String : ");
        String s1 = input.nextLine();   
        String[] tokens = s1.split("[\\s\\xA0]+");      
        System.out.println(tokens.length);      
        for(String s : tokens){
            System.out.println(s);

        } 
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top