Products
GG网络技术分享 2025-03-18 16:15 0
public static boolean checkNumber(String num,String type){ String eL = \"\";
switch (type) {
case \"0+\":
eL = \"^//d+$\";//非负整数
break;
case \"+\":
eL = \"^//d*[1-9]//d*$\";//正整数
break;
case \"-0\":
eL = \"^((-//d+)|(0+))$\";//非正整数
break;
case \"-\":
eL = \"^-//d*[1-9]//d*$\";//负整数
break;
default:
eL = \"^-?//d+$\";//整数
break;
}
Pattern p = Pattern.compile(eL);
Matcher m = p.matcher(num);
boolean b = m.matches();
return b;
}
String ss = \"333\";
out.println(isType.checkNumber(ss,\"+\"));
百度里找的例子,为什么传入任何数字都是false
试试把//d改为\\d
把你的// 全部改成\\
case \\\"+\\\":
eL = \\\"^\\d*[1-9]\\d*$\\\";//正整数
..... 上面应该有两个\\ csdn把两个\\都改成了一个
楼主疑惑完整解答,一楼给出了验证数字的语法,虽然可以验证数字,但没解释清楚。确实如此,把//改成\\就可以正确判断了。为什么不管输入什么数字,此表达式 eL = \\\"^//d*[1-9]//d*$\\\";//正整数 ,一直匹配出错false,因为这个语句代表的是匹配//d这样的字符串(你输入//d,就会得出true),所以输入数字当然出错,百度的方法可能考虑到转译,只不过用反了。(mark)
如果有多个匹配可能,就选择最长的那个,这是正则表达式的默认 greedy match(贪婪匹配)。如果在 {1,3} 后面放一个问号,变为 \\d{1,3}? 它就会选择最短的那个匹配,这样的匹配就是 lazy match(懒惰匹配)。不过这样一来,1、9、2 每一个数字都会被匹配到,这应该不是你要的。
Demand feedback