1 位或 2 位数字的整数

Integer in String with 1 or 2 digits

抱歉,我不知道你是否理解我想做什么,我也不是 100% 确定它是否可以通过正则表达式完成,但也许有比我想到的更好的解决方案.

我想创建一个函数,它获取一个字符串作为参数并检查该字符串中是否有整数(这是简单的部分) 该函数应该 return false,如果有一个整数,但超过 2 位数字或数字被拆分。

有效:

无效

所以简单的部分,1 位或 2 位数字的正则表达式没什么大不了的

[0-9]{1,2}

另一种方式,我认为是非常糟糕的代码,是遍历整个 String 并计算每个 int 的循环。我一看到一个而下一个不是 int,该字符串中的每个其他 int 都会结束。

我希望有更顺畅的方式来做到这一点。

Regex:

[^0-9]*[0-9]{1,2}[^0-9]*

您会注意到,在链接的演示中,我放置了 ^$ 锚点并使用了 m 多行修饰符...这可能是也可能不是是否必要取决于您的实施。

本质上,我正在寻找被 0+ 个非数字包围的 1-2 个数字。

将所有非数字替换为空,然后用该数字查看原始字符串是否包含它。

String str = "foo1b2ar"; //starting string
String num = str.replaceAll("[\D]",""); //the number it contains
return str.contains(num) && num.length() <= 2; //does the original have that number all together? and is it short?

示例:

"foo1bar" -> “1” -> 原文是否包含“1”?是的

"f1o23obar" -> “123” -> 原文是否包含“123”?编号

您可以使用以下习语来匹配整个 String 与只有 1 个或 2 个数字的 1 个数字:

String[] test = {
    "foo1bar",
    "foobar1",
    "f12obar",
    "12foobar",
    "f1o2obar",
    "f1o23obar"
};
for (String s: test) {
    //                   | matching the whole string
    //                   |       | non-digit, 0 or more times, reluctantly quantified
    //                   |       |     | 1 or 2 digits
    //                   |       |     |       | non digit, 0 or more times, 
    //                   |       |     |       | reluctantly quantified
    System.out.println(s.matches("\D*?\d{1,2}\D*?"));
}

输出

true
true
true
true
false
false