【问题标题】:Checking digits in string, doesnt work when the string starts with a 0检查字符串中的数字,当字符串以 0 开头时不起作用
【发布时间】:2020-02-18 15:34:36
【问题描述】:

我有一个家庭作业,我们必须为健身中心制作一个非常基本的控制台应用程序,它可以创建成员和员工。当我要求用户输入新成员的生日时,我的问题就出现了。它应该检查生日是否为 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 EG 开头时才完成循环。:190798。

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

【问题讨论】:

  • 是的,因为您正在接受一个 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 日,因此您要么需要更复杂的日期,要么 - 我会说更好 - 将输入正确解析为 Date 或至少 3 个整数,然后您可以将其提供给更彻底的检查。

标签: java while-loop int string-length value-of


【解决方案1】:

正如其他答案告诉您的那样,如果您以 0 开头的 int 代码将忽略它。您可以导入 SimpleDate 并使用 String 来使用它。我在这里留下一个关于另一个问题的链接,也许可以帮助你更多。 [链接]How can I convert an Integer (e.g 19000101 ) to java.util.Date?

import java.text.SimpleDateFormat;  
import java.util.Date; 

public class StringToDateEXE {  
public static void main(String[] args)throws Exception {  
    String DateT="31/12/1998";  
    Date NDate=new SimpleDateFormat("dd/MM/yyyy").parse(DateT);  
    System.out.println(DateT+"\t"+NDate);  
}  
}  

希望对您有所帮助。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      您正在接受int,这使它放弃了前导0。您应该接受String。这是更正的代码

      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();
      }   
      

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

      【讨论】:

        猜你喜欢
        • 2023-01-01
        • 2011-05-04
        • 1970-01-01
        • 2022-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多