检查字符串值是否是一组整数

时间:2014-10-15 21:37:01

标签: java

我试图接受一个字符串并检查字符串的值是否等于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);

2 个答案:

答案 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);