java正则表达式在尝试使alpha和非零无效时无效
编写了一个接收字符串并检查以下条件的方法:
- 如果字符串为“退出”,它将终止程序李>
- 如果字符串不是整数,则应返回“无效输入”李>
- 任何负整数和0都应返回“无效输入”李>
然而,当我通过10时,它返回为“无效输入”
请告知:
public static String validate(String input) {
Pattern pattern = Pattern.compile(".*[^1-9].*");
StringBuilder results = new StringBuilder();
if (input.equals("quit")) {
System.exit(1);
} else if (!pattern.matcher(input).matches() == false) {
results.append("Invalid input ");
results.append("'");
results.append(input);
results.append("'");
}
return results.toString();
}
我现在做的有什么问题吗
# 1 楼答案
您的正则表达式字符串不允许存在零(而不仅仅是一个单独的零)
也就是说,字符串
".*[^1-9].*"
正在寻找“任意数量的字符、非1-9的字符以及任意数量的字符”。当它找到零时,它会给出错误的结果查看What is the regex for "Any positive integer, excluding 0"了解如何更改此设置
该页面上最有用的解决方案可能是regex} 时,还可以确保这个正则表达式匹配整个输入,而不仅仅是其中的一部分(无需添加开头和结尾锚^{)
[0-9]*[1-9][0-9]*
(对于有效整数)。这允许前导零和/或内部零,这两者都可以存在于有效整数中。在使用^{此外,第
else if (!pattern.matcher(input).matches() == false)
行可以更清楚地表达出来。。。。也许可以试试else if (pattern.matcher(input).matches())