我需要让下面的代码验证字符串只使用数字。我做了一个If语句但是每次运行程序时它都会输出一条消息,说明字符串不能是整数。
以下是变量:
private String personalIdNo;
private boolean isValidPersonalIdNo;
这是我遇到问题的代码,它不会工作它总是输出"不是整数"即使我把它作为所有数字。
public void personalIdValidator()
{
if (personalIdNo.matches("[0-9]"))
{
//Return True
}
else{
isValidPersonalIdNo = false;
System.out.println("The input is not only int");
}
}
答案 0 :(得分:2)
您的检查几乎是正确的,您只需要将personalIdNo.matches("[0-9]")
替换为personalIdNo.matches("[0-9]+")
或personalIdNo.matches("[0-9]*")
,具体取决于您是否希望空字符串也有效。
说明:
您当前的模式表示“0
和9
之间的单个字符”。字面意思是“一个字符”,例如即使您的代码,“1”或“4”也是有效的输入。
要允许多个字符,有两个选项:
+
表示“一个或多个字符”*
表示“零个或多个字符”(即允许空字符串){min,max}
指定具体数字,但我认为这不是您想要的)请注意,此模式目前也可以防止负数。如果您还想允许负数,可以使用personalIdNo.matches("-?[0-9]+")
,其中?
表示“零或一次出现”。
证明/代码示例:
public class NumberTest {
public static void main(String[] args) {
personalIdValidator("");
personalIdValidator("0");
personalIdValidator("1");
personalIdValidator("123");
personalIdValidator("-123");
personalIdValidator("--123");
personalIdValidator("abc");
personalIdValidator("1a2b3c");
personalIdValidator("٤٥٦٧٨");
}
public static void personalIdValidator(String personalIdNo) {
if (personalIdNo.matches("-?[0-9]+")) {
System.out.println("The input is only int");
} else {
System.out.println("The input is not only int");
}
}
}
// The input is not only int
// The input is only int
// The input is only int
// The input is only int
// The input is only int
// The input is not only int
// The input is not only int
// The input is not only int
// The input is not only int