[英]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.