字符串中的整数,带有1或2位数字

时间:2015-06-11 22:40:41

标签: java regex string int

抱歉,我不知道你是否理解我想做什么,而且我也不能100%确定是否可以通过正则表达式来完成,但也许有一个比我脑子里想的更好的解决方案。 / p>

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

有效:

  • foo1bar
  • foobar1
  • f12obar
  • 12foobar

无效

  • f1o2obar
  • f1o23obar

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

[0-9]{1,2}

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

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

3 个答案:

答案 0 :(得分:3)

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

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?

示例:

&#34; foo1bar&#34; - &GT; &#34; 1&#34; - &GT;原件是否包含&#34; 1&#34;?是。

&#34; f1o23obar&#34; - &GT; &#34; 123&#34; - &GT;原件是否含有&#34; 123&#34;?否。

答案 1 :(得分:2)

您可以使用以下惯用法将整个String与仅1个1位或2位数字匹配:

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

答案 2 :(得分:0)

Regex

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

您会注意到,在链接的演示中,我添加了^$个锚点并使用了m多行修饰符...这可能是也可能不是根据您的实施情况而定。

基本上,我正在寻找由0+非数字包围的1-2位数字。