Utilisation du scanner en java Comment puis-je avoir Hasnext (astrring) où la chaîne n'est pas un motif regex?

StackOverflow https://stackoverflow.com/questions/1506249

  •  19-09-2019
  •  | 
  •  

Question

J'essaie de faire comme l'indique ma question, j'ai tellement le code suivant qui trouverait le match.

String test = scan.next();
if (test.equals("$let"))
return 1;

Cependant, je préférerais utiliser Hasnext pour ne pas consommer de jeton; Cependant, lorsque je fais ce qui suit, il échoue.
if (scan.hasNext("$let"))
return 1;

Je me rends compte que le moment donné a ensuite une variable, il attend un modèle, mais je pensais que si je n'ai pas de symboles regex, cela devrait fonctionner. Je pensais aussi que $ était peut-être un symbole regex, donc j'ai essayé / $ cependant, cela n'a pas fonctionné!

Merci pour l'aide!

Était-ce utile?

La solution

Vous devez utiliser $ pour échapper au regex, mais il est plus facile d'obtenir le prochain () et d'enregistrer le résultat.

Autres conseils

En général, si vous avez une chaîne arbitraire que vous souhaitez correspondre littéralement sans signification à des métacharacteurs regex, vous pouvez utiliser java.util.Pattern.quote.

Scanner sc = new Scanner("$)}**");
System.out.println(sc.hasNext(Pattern.quote("$)}**"))); // prints "true"
System.out.println(sc.hasNext("\\Q$)}**\\E")); // prints "true"
System.out.println(sc.hasNext("$)}**")); // throws PatternSyntaxException

Vous pouvez également utiliser le \Q et \E Marqueurs de citation, mais bien sûr, vous devez vous assurer que la chaîne citée ne doit pas contenir elle-même \E.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top