我试图接受一个字符串并检查字符串的值是否等于1-9999之间的数字,否则返回错误消息。我已经看到并听说过我可以使用.isNumeric()或.Matches(),但我似乎无法弄清楚如何实现它。这就是我到目前为止所做的:
String yearString;
int year = 0;
Scanner input = new Scanner(System.in);
do {
System.out.println("Please enter the year of the start date");
yearString = input.nextLine();
if (yearString.matches("[1-9999]+"))
{
year = Integer.parseInt(yearString);
}
else
{
System.out.println("Please enter positive numbers only");
}
} while (year <= 0);
答案 0 :(得分:2)
这个表达式:
[1-9999]+
表示&#34;匹配1到9,或9,或9,或9&#34;的数字。每个9分别单独拍摄。
您可以更正该正则表达式,但更容易将数字转换为整数并在之后检查其有效性。
boolean isValid(String numericString) {
try {
int number = Integer.parseInt(numericString);
return number > 0 && number <= 9999;
} catch (NumberFormatException e) {
return false;
}
}
答案 1 :(得分:2)
如果您需要正则表达式方法,可以使用以下正则表达式而不是[1-9999]+
(生成无限数字):[1-9][0-9]{0,3}
。这意味着任何String
以非零数字开头,后跟3或更少的数字。
一点点测试:
String regex = "[1-9][0-9]{0,3}";
int i;
for (i=0 ; String.valueOf(i + 1).matches(regex) ; i++);
System.out.println(i);
按预期输出9999
。但是, @uʍopǝpısdn解决方案更具可读性,但如果存在大量无效字符串可能会更慢(异常具有不可忽略的成本),而正则表达式方法不依赖于此。如果您要测试很多条目,则应仅编译一次模式并使用Matcher
:
Pattern p = Pattern.compile("[1-9][0-9]{0,3}");
int i;
for (i=0 ; p.matcher(String.valueOf(i + 1)).matches() ; i++);
System.out.println(i);