在Java中使用Scanner我怎么能在其中字符串不是正则表达式模式的hasNext(aString)?

时间:2009-10-01 20:24:37

标签: java regex java.util.scanner

我正在尝试按照我的问题说明,所以我有以下代码可以找到匹配项。

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

但是,我更喜欢使用hasNext来不使用令牌;但是,当我执行以下操作时,它会失败 if (scan.hasNext("$let"))
return 1;

我意识到当给出下一个变量时它期望一个模式,但我想如果我没有任何正则表达式符号它应该工作。我还以为$可能是一些正则表达式符号所以我试过/ $然而,这不起作用!

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

你应该使用\\ $来逃避正则表达式,但是更容易获得next()并保存结果。

答案 1 :(得分:0)

一般情况下,如果你有一些字面意义的字符串与任何正则表达式元字符无关,你可以使用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

您还可以使用\Q\E引号,但当然您需要确保引用的字符串本身不能包含\E