2009-12-29 4 views
4

Le code Java suivant affichera "0". Je m'attendrais à ce que cela imprime "4". Selon l'API Java String.split "Divise cette chaîne autour des correspondances de l'expression régulière donnée". Et à partir de la documentation d'expression régulière liée:Java La regex fractionnée ne fonctionne pas comme prévu

classes de personnages pré-définies
. N'importe quel caractère (peut ou non correspondre aux terminateurs de ligne)

Par conséquent, je m'attendrais à ce que "Test" soit divisé sur chaque caractère. Je suis clairement en train de mal comprendre quelque chose.

System.out.println("Test".split(".").length); //0

+0

J'espère que cela est juste pour l'amour de la curiosité, car il existe des moyens plus faciles à trouver la longueur d'une chaîne .. .) –

Répondre

6

Vous avez raison: il est divisé sur chaque personnage. Cependant, le caractère « split » est pas retourné par cette fonction, d'où le résultat 0.

Le rôle important dans la javadoc: « Trailing chaînes vides ne sont donc pas inclus dans le tableau résultant. »

Je pense vous voulez "Test".split(".", -1).length(), mais cela retournera 5 et non 4 (il y a 5 '' espaces '': un avant T, un entre T et e, les autres pour es, st, et le dernier après le t final.)

+0

Merci. Je vois ce qui se passe maintenant. – Jon

1

Tout va bien. "Test" est divisé sur chaque caractère, et donc entre eux il n'y a pas de caractère. Si vous voulez itérer votre chaîne sur chaque caractère, vous pouvez utiliser les méthodes charAt et length.

2

Vous devez utiliser deux barres obliques inverses et il devrait fonctionner correctement: est par exemple ici:

String[] parts = string.split("\\.",-1); 
Questions connexes