所以我试图在DD / MM / YYYY中输入出生日期,输入长度不能超过10个字符,我必须确保它的格式正确,以避免用户输入类似的内容A51 / 1/1982,我认为至少据我所知,我已经正确地写了:)但是我现在在检查输入时永远陷入了while循环
System.out.println("Please enter your date of birth in the format DD/MM/YYYY");
dateOfBirth = scanner.nextLine(); //Read date of birth
dob0 = dateOfBirth.substring(0);// to check char 0 is between 0-3
dob1 = dateOfBirth.substring(1);// to check char 1 is between 0-9
dob2 = dateOfBirth.substring(2);// to check char 2 is between /
dob3 = dateOfBirth.substring(3);// to check char 3 is between 0-1
dob4 = dateOfBirth.substring(4);// to check char 4 is between 0-9
dob5 = dateOfBirth.substring(5);// to check char 5 is between /
dob6 = dateOfBirth.substring(6);// to check char 6 is between 1-2
dob7 = dateOfBirth.substring(7);// to check char 7 is between 0-9
dob8 = dateOfBirth.substring(8);// to check char 8 is between 0-9
dob9 = dateOfBirth.substring(9);// to check char 9 is between 0-9
dob = dateOfBirth.length(); //convert string to int to check length
while (dob !=10 || !dob0.matches("[0-3]+") || !dob1.matches("[0-9]+") || !dob2.matches("[/]+")
|| !dob3.matches("[0-1]+") || !dob4.matches("[0-9]+") || !dob5.matches("[/]+")
|| !dob6.matches("[1-2]+") || !dob7.matches("[0-9]+") || !dob8.matches("[0-9]+")
|| !dob9.matches("[0-9]+"))//check all values
{
System.out.println("Please make sure you enter your date of birth in the format DD/MM/YYYY");
dateOfBirth = scanner.nextLine();
}
我猜我可能已经离开这个地方很久了,任何帮助都会受到赞赏:)
由于
答案 0 :(得分:1)
您没有重新评估新用户输入。只输入第一行。在输入新输入之后,整个dob0 = .. dob = stuff应该进入while循环。
答案 1 :(得分:0)
问题是你的while
条件会测试几个dobX
变量,但是你不会在循环中更新这些变量。但这只是问题的一部分。您应该只使用一个正则表达式来测试整个字符串,而不是使用另一个正则表达式来提取单个字符和测试每个字符。
while (! dateOfBirth.matches("[0-3][0-9]/[0-1][0-9]/[1-2][0-9]{3}") {
dateOfBirth = scanner.nextLine();
}
或者甚至更好,使用类似SimpleDateFormat
的类来尝试将字符串解析为日期。
new SimpleDateFormat("dd/MM/yyyy").parse("26/10/2013");
只需在while循环中放置一个try / catch块。如果parse
成功,break
来自循环,如果您catch
出现异常,请将消息打印给用户并重复。
答案 2 :(得分:0)
一个简单的方法是使用SimpleDateFormat并使用parse()函数。如果存在ParseException,则表示输入的格式不正确。
http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html#parse(java.lang.String,java.text.ParsePosition)