【问题标题】:Java - regex to match any integerJava - 正则表达式匹配任何整数
【发布时间】:2011-11-30 06:12:29
【问题描述】:

我遇到了一个匹配字符串与任何 int 的正则表达式的问题。

这是我所拥有的:

if(quantityDesired.matches("\b\d+\b")){.......}

但是 Eclipse 给了我:

Invalid escape sequence (valid ones are  \b  \t  \n  \f  \r  \"  \'  \\ )

我查看了其他类似的问题,并尝试使用双反斜杠,但这不起作用。有什么建议吗?

【问题讨论】:

    标签: java regex eclipse


    【解决方案1】:

    确实需要转义Java字符串文字中的反斜杠:

    "\\b\\d+\\b"
    

    这当然只匹配 positive 整数,而不是您在问题中所说的 any 整数。这是你的意图吗?

    我查看了其他类似的问题,并尝试使用双反斜杠,但这不起作用。

    那么你肯定还有另一个错误。我想问题是你想使用Matcher.find 而不是matches。前者在字符串中的任何位置搜索模式,而后者仅在 整个 字符串与模式匹配时才匹配。下面是一个如何使用Matcher.find的例子:

    Pattern pattern = Pattern.compile("\\b\\d+\\b");
    Matcher matcher = pattern.matcher(quantityDesired);
    if (matcher.find()) { ... }
    

    注意

    如果您确实想要匹配整个字符串,那么您不需要锚点:

    if (quantityDesired.matches("\\d+")) {.......}
    

    如果你只想接受适合 Java int 类型的整数,你应该使用 Integer.parseInt 作为Seyfülislam mentioned,而不是自己解析它。

    【讨论】:

      【解决方案2】:

      您可以查看Apache Commons Lang StringUtils.isNumeric,而不是正则表达式

      【讨论】:

        【解决方案3】:

        你为什么不喜欢Integer.parseInt() 方法?它可以满足您的需求,并且更具可读性。

        【讨论】:

        • 当心:parseInt 为 9999999999999999999 失败。虽然 OP 没有说明这是否是他想要的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-30
        • 2011-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多