web-dev-qa-db-fra.com

Java expression régulière value.split ("\\."), "Le point barre oblique inverse" se divise par caractère?

D'après ce que je comprends, le point barre oblique inverse (\.) Signifie un caractère de n'importe quel caractère? Donc, parce que la barre oblique inverse est une échappatoire, elle devrait être une barre oblique inversée ("\\.")

Qu'est-ce que cela fait sur une chaîne? Je viens de voir cela dans un code existant sur lequel je travaille. D'après ce que je comprends, il divisera la chaîne en caractères individuels. Pourquoi faire cela au lieu de String.toCharArray(). Donc, cela divise la chaîne en un tableau de chaînes qui ne contient qu'un seul caractère pour chaque chaîne du tableau?

35
Nap

Je suppose que vous manquez que les barres obliques inverses ('\') sont des caractères d'échappement dans Java Littéraux de chaîne. Donc, quand vous voulez utiliser un échappement '\' dans une expression régulière écrite comme un = Java Chaîne dont vous avez besoin pour y échapper; par exemple.

Pattern.compile("\.");   // Java syntax error

// A regex that matches a (any) character
Pattern.compile(".");  

// A regex that matches a literal '.' character
Pattern.compile("\\.");  

// A regex that matches a literal '\' followed by one character
Pattern.compile("\\\\.");

La méthode String.split(String separatorRegex) divise une chaîne en sous-chaînes séparées par des sous-chaînes correspondant à l'expression régulière. Ainsi, str.split("\\.") divisera str en sous-chaînes séparées par un seul littéral '.' personnage.

70
Stephen C

L'expression régulière "." correspondrait à n'importe quel caractère comme vous le dites. Cependant, un point échappé "\". correspondrait à des caractères de points littéraux. Ainsi 192.168.1.1 s'est partagé sur "\". résulterait en {"192", "168", "1", "1"}.

Votre formulation n'est pas complètement claire, mais je pense que c'est ce que vous demandez.

7
nall