繁体   English   中英

如何使用带有正则表达式的Scanner使用Java获得输入验证。模式和数组

[英]How can I get input validation with Java using Scanner with regex.Pattern and arrays

我想使用java.util.regex.Pattern将输入验证应用于简单的Java应用程序。 在添加模式匹配之前,我能够按预期将用户输入到我的数组中,但是我不知道如何在包含模式匹配的情况下做到这一点。

这行似乎有问题:in.nextLine(); 现在我添加了模式匹配的while语句,它在错误的位置吗?

这是我的小应用程序中的相关代码块。

//These variables used during input validation
        String tempName;
        int tempGrade;

        //These regex patterns are for input validation
        //Names can be 1-15 letters and grades are 2 digits
        Pattern namePattern = Pattern.compile("[A-Za-z]{1,15}");
        Pattern gradePattern = Pattern.compile("[0-9]{2,2}");

        //Parallel arrays to hold last names and grades
        String[] names = new String[5];
        int[] grades = new int[5];


        Scanner in = new Scanner(System.in);
        try {


            for(int i = 0; i<5; i++) {
                System.out.println("Enter a name:");
                tempName = in.nextLine(); 
                System.out.println("Enter a grade:");
                tempGrade = in.nextInt();
                in.nextLine(); 
                while(!namePattern.matcher(tempName).matches()) {
                    System.out.println("Bad input. Try again");                 
                } 
                names[i] = tempName;
                grades[i] = tempGrade;
                }

in.nextLine()是正确的(并通过调用nextInt()使用尾随的换行符)。 问题是你的循环。

while(!namePattern.matcher(tempName).matches()) {
    System.out.println("Bad input. Try again");     
    tempName = in.nextLine();  //<-- add this.            
} 

如果不更新tempName ,则如果输入循环主体,则永远不会离开,因为条件在打印消息后始终为true。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM