10
votes

Java: chaîne de numérisation pour un motif

Ceci est probablement rapide. Pourquoi ce code ne renvoie-t-il rien? XXX


0 commentaires

3 Réponses :


18
votes

hasnext (modèle de chaîne) ne renvoie que true si le jeton suivant correspond au motif. Dans votre cas, "asda" est le prochain jeton, qui ne correspond pas à "[A-Z] +" . La documentation est claire dans ce "[le] scanner n'auge pas d'entrée".

Si vous changez le modèle en "[A-ZA-Z] +" , vous obtiendrez trois jetons, ce qui peut être ce que vous avez voulu.

Si en fait, vous voulez seulement obtenir des jetons qui correspondent à "[A-Z] +" , vous pouvez effectuer l'une des options suivantes:

  • Jeter simplement les jetons non correspondants
  • aiséLimiteur ("[^ a-z] +") , puis invoquer simplement suivant ()
  • Utilisez Skip ("[^ A-Z] +")
  • Utilisez FindInline ("[A-Z] +")

    Conseil: Si la performance est critique, vous voudrez utiliser le modèle des surcharges de ces méthodes de précompilisation de ces méthodes.

    Conseil: Gardez à l'esprit que "xooo abc" a deux "[A-Z] +" correspondance. Si ce n'est pas ce que vous voulez, le regex devra être un peu plus compliqué. Ou vous pouvez toujours simplement supprimer les jetons non correspondants.


0 commentaires

0
votes

Changer xxx

à xxx


0 commentaires

0
votes

Si vous cherchez à imprimer toutes les mots entourés de votre délimiteur, vous voudrez peut-être être en sécurité et exclure complètement le modèle. De cette façon, vous ne rencontrez pas un mot qui contient un personnage qui ne figure pas dans votre motif, ce qui ferait la sortie de votre programme cette boucle (comme il fait actuellement). Par exemple: xxx


0 commentaires