Using Scanner in Java how can I hasNext(aString) where the string is not regex pattern?
-
19-09-2019 - |
Question
I am trying to do as my question states, sooo I have the following code which would find the match.
String test = scan.next();
if (test.equals("$let"))
return 1;
However, I would prefer to use hasNext as to not consume a token; however, when i do the following it fails.
if (scan.hasNext("$let"))
return 1;
I realize the when giving has next a variable it expects a pattern, but I thought if i don't have any regex symbols it should work. I also thought $ was possibly some regex symbol so I tried /$ however, that did not work!
Thanks for the help!
Solution
You should use \\$ to escape the regex, but it's easier to just get the next() and save the result.
OTHER TIPS
In general, if you have some arbitrary string that you want to match literally with no meanings to any regex metacharacters, you can use 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
You can also use the \Q
and \E
quotation markers, but of course you need to ensure that the quoted string must not itself contain \E
.