35 votes

Expression régulière Java value.split(" \\. "), " le point de barre oblique arrière " divise par caractère ?

D'après ce que je comprends, le point backslash ("\.") signifie un caractère de n'importe quel caractère, n'est-ce pas ? Donc parce que la barre oblique inverse est un échappement, ça devrait être barre oblique inverse point. ("\\.")

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

Y a-t-il des gourous de Java qui ont déjà utilisé cette méthode ?

70voto

Stephen C Points 255558

Je pense que vous n'avez pas compris que les barres obliques inverses ('\') sont des caractères d'échappement dans les chaînes littérales Java. Ainsi, lorsque vous souhaitez utiliser un caractère d'échappement '\' dans une regex écrite sous la forme d'une chaîne Java, vous devez l'échapper, par exemple, comme suit

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("\\\\.");

Le site String.split(String separatorRegex) divise une chaîne en sous-chaînes séparées par des sous-chaînes correspondant à l'expression rationnelle. Ainsi, str.split("\\.") se divisera str en sous-chaînes séparées par un seul caractère littéral '.'.

7voto

nall Points 10996

La regex "." 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 se divise sur " \. " donnerait comme résultat {"192", "168", "1", "1"}.

Votre formulation n'est pas tout à fait claire, mais je pense que c'est ce que vous demandez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X