【问题标题】:Using Scanner in Java how can I hasNext(aString) where the string is not regex pattern?在 Java 中使用 Scanner 我如何才能 hasNext(aString) 字符串不是正则表达式模式?
【发布时间】:2009-10-01 20:24:36
【问题描述】:

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

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

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

我意识到 when give 下一个变量它需要一个模式,但我认为如果我没有任何正则表达式符号它应该可以工作。我还认为 $ 可能是一些正则表达式符号,所以我尝试了 /$,但是没有用!

感谢您的帮助!

【问题讨论】:

    标签: java regex java.util.scanner


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      一般来说,如果你有一些任意的字符串,你想从字面上匹配任何正则表达式元字符,没有任何意义,你可以使用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

      【讨论】:

        猜你喜欢
        • 2016-07-30
        • 1970-01-01
        • 1970-01-01
        • 2017-12-23
        • 1970-01-01
        • 1970-01-01
        • 2017-10-16
        • 1970-01-01
        • 2015-11-28
        相关资源
        最近更新 更多