使用 substring 方法时如何处理输入错误?

How do I handle misinputs when using the substring method?

我正在尝试完成一个采用以下格式的日期的项目:月日,年示例:1990 年 12 月 1 日。输入此日期后,我正在尝试以 Month/Day/Year 格式输出。我应该使用的方法是 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();
      }

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

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

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

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

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

  • 考虑使用 String.trim() 去除多余的空格。

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