Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查字符串中的数字,当字符串以0开头时不起作用_Java_While Loop_Int_String Length_Value Of - Fatal编程技术网

Java 检查字符串中的数字,当字符串以0开头时不起作用

Java 检查字符串中的数字,当字符串以0开头时不起作用,java,while-loop,int,string-length,value-of,Java,While Loop,Int,String Length,Value Of,我有一个家庭作业,我们必须为健身中心制作一个非常基本的控制台应用程序,它可以创建会员和员工。我的问题发生在我要求用户输入新成员的生日时。它应该检查生日的格式是否为DD/MM/YY,因此我检查给出的答案是否为6位,并且仅为6位。这似乎是可行的,除非有人给出了以0开头的出生日期,例如:090498 System.out.println("Please enter the new members birthday, in the format of DD/MM/YY:"); this.birt

我有一个家庭作业,我们必须为健身中心制作一个非常基本的控制台应用程序,它可以创建会员和员工。我的问题发生在我要求用户输入新成员的生日时。它应该检查生日的格式是否为DD/MM/YY,因此我检查给出的答案是否为6位,并且仅为6位。这似乎是可行的,除非有人给出了以0开头的出生日期,例如:090498

System.out.println("Please enter the new members birthday, in the format of DD/MM/YY:");
    this.birthdate = console1.nextInt();
    while(String.valueOf(birthdate).length() != 6){
    System.out.println("Please give a valid date of birth in the format of: DD/MM/YY");
    this.birthdate = console1.nextInt();
}   
它不会给出错误消息,但仅当生日是6位数字且以1开头时,才完成循环,例如:190798


我知道这可能很简单,但我大约一个月前才开始学习CS:)

问题是您接受的是int,并且首字母0会自动删除。生日不应表示为整数。我的建议是将该字段更改为字符串,并接受该类型的值作为结果。

问题是您接受的是int,并且初始值0会自动删除。生日不应表示为整数。我的建议是将该字段更改为字符串,并接受该类型的值作为结果。

您使用的是
int
,这会使其删除前导的0。您应该接受
字符串
。下面是为实现这一点而更正的代码

System.out.println("Please enter the new members birthday, in the format of DD/MM/YY:");
this.birthdate = console1.nextLine();
while(birthdate.length() != 6){
    System.out.println("Please give a valid date of birth in the format of: DD/MM/YY");
    this.birthdate = console1.nextLine();
}   

这假设您已将
生日的类型更改为
字符串。您应该知道您的验证策略很幼稚,因为任何人都可以输入长度为6的字符串,而不必输入有效的生日或生日。使用中的正则表达式进行此类验证。通过向任何字符串传递正则表达式,可以将正则表达式应用于具有
string.matches()
方法的字符串。另一种方法是将整数转换为日期-时间对象。

您使用的是
int
,这使得它去掉前导的0。您应该接受
字符串
。下面是为实现这一点而更正的代码

System.out.println("Please enter the new members birthday, in the format of DD/MM/YY:");
this.birthdate = console1.nextLine();
while(birthdate.length() != 6){
    System.out.println("Please give a valid date of birth in the format of: DD/MM/YY");
    this.birthdate = console1.nextLine();
}   

这假设您已将
生日的类型更改为
字符串。您应该知道您的验证策略很幼稚,因为任何人都可以输入长度为6的字符串,而不必输入有效的生日或生日。使用中的正则表达式进行此类验证。通过向任何字符串传递正则表达式,可以将正则表达式应用于具有
string.matches()
方法的字符串。另一种方法是将整数转换成日期-时间对象。

正如其他答案所告诉的那样,如果以0开始整数,代码将忽略它。您可以导入SimpleDate并使用字符串来使用它。我在这里留下一个关于另一个问题的链接,也许可以帮助你更多。 [连结]


希望有帮助。

正如其他答案告诉您的那样,如果以0开始整数,代码将忽略它。您可以导入SimpleDate并使用字符串来使用它。我在这里留下一个关于另一个问题的链接,也许可以帮助你更多。 [连结]


希望有帮助。

是的,因为您正在接受一个int,并且首字母0会自动删除。您应该接受字符串。日期格式(如
DD/MM/YY
)不是单个数字,而是3个数字的组合,因此,如果您希望将日期作为一个数字输入,则需要使用字符串。然后可以使用正则表达式检查这一点,以仅允许每个部件使用有效的数字。相比之下,您的方法将允许我输入999999的日期,这将被视为有效,因为它是一个6位数字。检查合理日期输入的正则表达式可以是
^(0[1-9]|[12][0-9]|3[01])(0[1-9]|1[0-2])[0-9]{2}$
。这将允许0天在01-31范围内,月在01-12范围内,但它将允许“无效”日期,如2月30日或4月31日,因此您可能需要更复杂的日期,或者-我认为这会更好-正确地将输入解析为
日期
,或者至少解析为3个整数,这样您就可以进行更彻底的检查。是的,因为您正在接受一个int,并且初始值0会自动删除。您应该接受字符串。日期格式(如
DD/MM/YY
)不是单个数字,而是3个数字的组合,因此,如果您希望将日期作为一个数字输入,则需要使用字符串。然后可以使用正则表达式检查这一点,以仅允许每个部件使用有效的数字。相比之下,您的方法将允许我输入999999的日期,这将被视为有效,因为它是一个6位数字。检查合理日期输入的正则表达式可以是
^(0[1-9]|[12][0-9]|3[01])(0[1-9]|1[0-2])[0-9]{2}$
。这将允许01-31范围内的天数和01-12范围内的月份,但它将允许“无效”日期,如2月30日或4月31日,因此您可能需要更复杂的日期,或者-我认为这会更好-正确地将输入解析为
日期
,或者至少解析为3个整数,这样您就可以进行更彻底的检查。