2008-10-22 10 views

Répondre

867

Quelque chose dans les lignes de

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

Ce regroupe tous les espaces blancs comme séparateur.

Donc, si j'ai la chaîne:

"Hello[space][tab]World"

Cela devrait donner les chaînes "Hello" et "World" et omettre l'espace vide entre le [space] et le [tab]. Comme VonC l'a signalé, la barre oblique inverse devrait être échappée, car Java essaierait d'abord d'échapper la chaîne à un caractère spécial, et enverrait que soit analysé. Ce que vous voulez, c'est le littéral "\s", ce qui signifie que vous devez passer "\\s". Cela peut être un peu déroutant.

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

+0

Merci pour ce rappel. Je viens de coder de la hanche :) –

+25

Notez que vous devez d'abord 'trim()': 'trim(). Split (" \\ s ++ ")' - sinon, par ex. la division 'a b c' émettra deux chaînes vides en premier. –

+0

Pourquoi avez-vous utilisé quatre barres obliques inverses vers la fin de votre réponse? c'est à dire. '" \\\\ s "'? –

35

« \\ s + » devrait faire l'affaire

+1

Pourquoi + à la fin? – Floella

+3

@Anarelle il répète au moins une fois la capture de caractères de l'espace, et autant de fois que possible: voir [https://regex101.com/r/dT7wG9/1](https://regex101.com/r/dT7wG9/1) ou [http://rick.measham.id.au/paste/explain.pl?regex=\s%2B] (http: //rick.measham.id.au/paste/explain.pl? regex = \ s% 2B) ou [http://regexper.com/# VonC

77

Dans la plupart des dialectes regex il y a un ensemble de caractère pratique résumés que vous pouvez utiliser pour ce genre de chose - ce sont des bons à retenir:

\w - Correspond à n'importe quel mot.

\W - Tout caractère non-mot.

\s - Autorise tout caractère blanc.

\S - Correspond à tout autre caractère que l'espace blanc.

\d - Correspond à n'importe quel chiffre.

\D - Matchs tout sauf chiffres.

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

+2

lien utile: http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html –

+0

Le lien ne marche plus. s'il vous plaît mettre à jour –

+0

grand info merci – Simmant

2

Comme il est une expression régulière, et je suppose u voudrais également pas les 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]+/) 
+2

Le code Java fourni ici ne compile pas. – Stephan

56

Pour obtenir ce travail en Javascript, je devais faire ce qui suit:

myString.split(/\s+/g) 
+15

Ceci est en Javascript. Je ne faisais pas attention non plus :) :) – miracle2k

+14

Oups. Mon erreur. Peut-être que cette réponse aidera encore d'autres personnes qui trébuchent sur ce sujet en cherchant une réponse Javascript. :-) –

+0

Haha Je cherchais une réponse pour JavaScript, je suis tombé par hasard sur cette question et j'ai remarqué votre réponse avant de partir. +1 – Kris

1

vous pouvez diviser une chaîne par saut de ligne en utilisant l'instruction suivante:

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

vous pouvez diviser une chaîne par des espaces blancs en utilisant la déclaration suivante:

String textStr[] = yourString.split("\\s+"); 
9

vous pouvez également avoir un UniCode xa0 espace insécable ...

String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking 
+0

cela m'aide! –

+0

Cela a fonctionné pour moi aussi :)! – aravind

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

En quoi est-ce différent de la réponse acceptée? – Stephan

8
String string = "Ram is going to school"; 
String[] arrayOfString = string.split("\\s+"); 
+0

Ceci est la réponse correcte – Arrow

+0

Je suis sûr. Ça va marcher. – Arrow

+0

En quoi est-ce différent de la réponse acceptée? – Stephan

-1

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

     } 
    } 
} 
+0

Pouvez-vous s'il vous plaît détailler votre réponse? – Stephan

Questions connexes