【问题标题】:How do I handle misinputs when using the substring method?使用 substring 方法时如何处理错误输入?
【发布时间】:2022-01-11 06:39:20
【问题描述】:

我正在尝试完成一个项目,该项目采用以下格式的日期:月日,年示例:1990 年 12 月 1 日。在采用此日期后,我试图将其输出到格式月/日/年。我希望使用的方法是 substring。在处理错误输入时,我遇到了错误问题。例如,如果没有逗号,则会发生错误并终止循环。我想知道是否有办法检查每个值是否有错误,然后如果发现错误则继续循环。到目前为止,这是我的代码:

 public static void main(String[] args) {
      Scanner scnr = new Scanner(System.in);
                          // Flag to indicate next iteration
      String lineString = "";
      String month;
      int year;
      int day;
      char comma;
            
      lineString = scnr.nextLine();
      while(!lineString.equals(-1)) {
    
       month = lineString.substring(0, lineString.indexOf(" "));
       day = Integer.parseInt(lineString.substring(lineString.indexOf(" ") + 1, lineString.indexOf(',') ));   
       comma = lineString.charAt(lineString.indexOf(','));
       year = Integer.parseInt(lineString.substring(lineString.length()-4));
   
       System.out.println(month);
       System.out.println(day);
       System.out.println(comma);
       System.out.println(year);
       
       lineString = scnr.nextLine();
      }

【问题讨论】:

    标签: java parsing error-handling format substring


    【解决方案1】:

    一种方法是捕获异常。这就是处理来自parseInt 的潜在异常的方法;例如当值不是有效整数时。

    另一种方法是使代码更加健壮,以便根本不抛出异常。例如:

    • 检查indexOf 调用的结果以确保它们不是-1 ...这意味着“未找到”,并且

    • 不要对每个字段中的字符数做出假设;例如lineString.length() - 4

    • 考虑使用String.trim() 去除额外的空白。

    我认为您需要同时使用这两种方法。关键是要考虑用户可能犯的所有错误并允许他们犯错。编写自己的测试也是一个好主意。

    【讨论】:

      【解决方案2】:

      您可以将代码包装在 while 循环中的 try-catch 块中。它会在不终止程序的情况下捕获您的异常。

      【讨论】:

        猜你喜欢
        • 2022-12-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-04
        • 1970-01-01
        • 1970-01-01
        • 2016-07-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多