Java Scanner avec la regex délimiteur
Pourquoi le code suivant renvoie false?
Scanner sc = new Scanner("-v ");
sc.useDelimiter("-[a-zA-Z]\\s+");
System.out.println(sc.hasNext());
La chose étrange est -[a-zA-Z]//s+
retournera true.
Je ne peux pas comprendre pourquoi il en retourne true:
Scanner sc = new Scanner(" -v");
sc.useDelimiter("-[a-zA-Z]\\s+");
System.out.println(sc.hasNext());
Vous devez vous connecter pour publier un commentaire.
Un scanner est utilisé pour rompre une chaîne de caractères en jetons. Les délimiteurs sont les séparateurs entre les jetons. Les délimiteurs sont ce ne sont pas appariés par le scanner; ils sont jetés. Vous dîtes que le scanner
-[a-zA-Z]\\s+
est un délimiteur et depuis-v
correspond à celle de la regex, il l'ignore.Si vous êtes à la recherche d'une chaîne de caractères qui correspond à l'expression rationnelle, l'utilisation
String.matches()
.Si votre but est vraiment de découper une chaîne en jetons, alors vous pourriez aussi envisager de
String.split()
, qui est parfois plus pratique à utiliser.-[a-zA-Z]\\s+
en tant que séparateur, -v est l'entrée.Merci John Kugelman, je pense que vous avez raison.
Scanner peut utiliser personnalisés séparateur pour diviser entrée en jetons.
Le séparateur par défaut est un espace.
Quand délimiteur ne correspond à aucune entrée, il fera tous les commentaires que d'un jeton:
Dans le code ci-dessus, le délimiteur en fait ne peut pas faire de match, tous les commentaires "-v" sera le seul jeton.
hasNext() a la prochaine jeton.
ce sera le match le délimiteur, et la scission, il a terminé avec 0 jeton, de sorte que le hasNext() est faux.