Quel modèle regex aurait besoin je passer à la méthode java.lang.String.split()
pour diviser une chaîne en un tableau de sous-chaînes en utilisant tous les caractères blancs (» », « \ t », « \ n », etc.) comme délimiteurs?Comment diviser une chaîne avec des caractères blancs comme délimiteurs?
Répondre
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]
« \\ s + » devrait faire l'affaire
Pourquoi + à la fin? – Floella
@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
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.
lien utile: http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html –
Le lien ne marche plus. s'il vous plaît mettre à jour –
grand info merci – Simmant
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]+/)
Le code Java fourni ici ne compile pas. – Stephan
Pour obtenir ce travail en Javascript, je devais faire ce qui suit:
myString.split(/\s+/g)
Ceci est en Javascript. Je ne faisais pas attention non plus :) :) – miracle2k
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. :-) –
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
Apache Commons Lang a une méthode pour diviser une chaîne avec des caractères blancs comme délimiteur:
StringUtils.split("abc def")
Cela peut être plus facile à utiliser qu'un motif regex.
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+");
vous pouvez également avoir un UniCode xa0 espace insécable ...
String[] elements = s.split("[\\s\\xA0]+"); //include uniCode non-breaking
cela m'aide! –
Cela a fonctionné pour moi aussi :)! – aravind
String str = "Hello World";
String res[] = str.split("\\s+");
En quoi est-ce différent de la réponse acceptée? – Stephan
é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);
}
}
}
Pouvez-vous s'il vous plaît détailler votre réponse? – Stephan
Merci pour ce rappel. Je viens de coder de la hanche :) –
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. –
Pourquoi avez-vous utilisé quatre barres obliques inverses vers la fin de votre réponse? c'est à dire. '" \\\\ s "'? –