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

Java 检查字符串值是否为一组整数,java,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"); ye

我试图接收一个字符串,检查字符串的值是否等于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,或9,或9,或9的数字。每9个单独取一个

您可以更正该正则表达式,但更容易将数字转换为整数,然后检查其有效性

boolean isValid(String numericString) {
    try {
        int number = Integer.parseInt(numericString);
        return number > 0 && number <= 9999;

    } catch (NumberFormatException e) {
        return false;
    }
}

如果需要正则表达式方法,可以使用以下正则表达式代替生成无限数的[1-9999]+[1-9][0-9]{0,3}。这意味着任何以非零数字开头,后跟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解决方案更具可读性,但如果存在大量无效字符串,则可能会更慢。异常具有不可忽略的成本,而正则表达式方法不依赖于此。如果要测试的条目很多,则应只编译一次模式并使用匹配器:


你有什么特别的问题?你的正则表达式至少会生成所有的[1-10]+表达式,几乎都是整数。有些带零的整数不能这样表达。我对try-And-catch不太自信。不需要try-And-catch就可以这样做吗?不。如果你没有捕捉到异常,这意味着此功能的用户将不得不。您希望保留包含的错误,因为它起源于这里,在外部没有任何意义。让我们说,我要找的不是1-9999之间的数字,而是1-24之间的数字。我可以将其更改为其他数字,但当我需要第二个数字仅在0-4之间时,我就被难倒了。这是正则表达式方法的另一个缺点:如果需要不同的范围,则很难实现自动化。对于1-24,你可以做:1[0-9]?| 2[0-4]?|[3-9]。我不知道是否可以做一些更简单的事情,但你可以看到,如果你需要灵活性,这种方法可能会变得复杂。我可以看到这是如何变得复杂的。我只是还没有被教尝试和捕捉,所以我不想实现它yetAlso,你能解释一下正则表达式的格式吗?我在创建1-31之间的1时遇到问题1到31之间的数字可以是1到9之间的任何数字,也可以是以1、2或3开头的两位数。如果以1或2开头,则第二个数字可以是任何数字0-9。否则,第二个数字只能是0或1。使用该逻辑,您可以构建正则表达式,如果您对语法有任何问题,请检查以下链接:
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);