我试图输入一个字符串,并检查字符串的值是否等于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);
如果你想有一个正则表达式的方法,你可以使用下面的正则表达式,而不是[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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句