我想检查一个字符串是否只包含3个数字(000-999)所以我试过了:
if (id.length() != 3 && !id.matches("[0-9]+")) {
Terminal.printError("ID needs 3 Numbers!");
return;
}
答案 0 :(得分:8)
在这些情况下,您必须使用OR
而不是AND
,而不仅仅是true
:
if (id.length() != 3 || !id.matches("[0-9]+")) {
...
}
或更简单地使输入字符串的大小和数字匹配:
if (!id.matches("\\d{3}")) {
...
}
请注意,如果您颠倒了整个布尔表达式的结果并且测试了名义上的情况,那么使用&&
的方式可能是有效的(虽然因为正则表达式未被利用而是多余的)。
但它会产生一个不太可读的代码:
if (!(id.length() == 3 && id.matches("[0-9]+") )) {
...
}
使用中间局部变量,它会更具可读性,你可能不会犯这个错误:
boolean isValid = id.length() == 3 && id.matches("[0-9]+")
if (!isValid) {
...
}
答案 1 :(得分:2)
使用此:
if (!id.matches("[0-9]{3}")) {
Terminal.printError("ID needs 3 Numbers!");
return;
}
使用{3}
部分仅匹配3次出现的数字,但在您的代码中,+
表示多个。