我想创建一个函数,它将一个字符串作为参数,并检查该字符串中是否有一个Integer(这是一个简单的部分) 如果有一个Integer,但该函数应该返回false,但是超过2位数或者数字被拆分。
有效:
无效
所以简单的部分,1或2位的正则表达式没什么大不了的
[0-9]{1,2}
另一种方式,我认为是非常糟糕的代码,是遍历整个String的循环并计算每个int。只要我看到一个而下一个不是int,那个字符串中的每个其他int都会导致结束。
我希望有更顺畅的方法来做到这一点。
答案 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)
[^0-9]*[0-9]{1,2}[^0-9]*
您会注意到,在链接的演示中,我添加了^
和$
个锚点并使用了m
多行修饰符...这可能是也可能不是根据您的实施情况而定。
基本上,我正在寻找由0+非数字包围的1-2位数字。