Java中输入行超过50个字符时的错误处理

Error handling when the input line exceeds 50 characters in Java

我有一个程序,每行都从一个 txt 文件中读取,我应该在该行超过 50 个字符时处理错误。我对 Java 中的异常不是很熟悉,但是如果我只使用这样的 'if' 条件可以吗:

 if(line.length() > 50) {
              System.out.println("over 50 characters on this line");
              return;
          }

或者我应该像这样声明一个函数:

static void checkLineLength(int lineLength) {
    if(lineLength > 50) {
        throw new ArithmeticException("over 50 characters");
    }
}

并在主函数中调用它?

checkLineLength(line.length());

LE:我稍微更改了异常处理块:

static void checkLineLength(int lineLength) {
    if(lineLength > 50) {
        try {
            throw new Exception("over 50 ch");

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.exit(1);
        }
    }
}

好点了吗?我看到它有效,但我想知道这是否是专业的方法。

只要抛出Exception,这两种方式都可以。编写该方法的唯一好处是您可以重用它。

只有一件事,System.out.println("over 50 characters on this line"); 会将其记录在控制台中并默默地继续前进。

抛出一些异常,如 throw new ArithmeticException("over 50 characters"); ,将会打断流程。

编辑:

方法一:

你可以使用这段代码:

static void checkLineLength(int lineLength) {
    if(lineLength > 50) {
        throw new ArithmeticException("over 50 characters");
    }
}

方法二:

static void checkLineLength(int lineLength) {
    if(lineLength > 50) {
        throw new ArithmeticException("over 50 characters");
    }
}

并从代码中的某处调用此方法并将其放入 try 块中:

try{
    checkLineLength(line.length()); // call to the method
}
catch(Exception e){
     e.printStackTrace(); // print the stacktrace if exception occurs
     System.exit(1);
}

定义您的异常 class。例子

class LineLimitException extends RuntimeException{
     public LineLimitException(String message){
       super(message);
     }

}

在你的逻辑中使用你的异常class

if(lineLength > 50) {
        throw new LineLimitException("over 50 characters");
}

到目前为止,其他答案都集中在抛出和处理异常上(有很好的建议),但不讨论异常是否是处理长文本行情况的最佳方式这一点。

你写:

I'm supposed to handle the error when the line has more than 50 characters.

措辞"handle the error"需要解释/澄清。如果文本文件中的一行超过 50 个字符的限制,您应该怎么办?

  • 使用前 50 个字符并忽略尾随休息?
  • 忽略单行错误,但阅读其他行?
  • 由于语法错误无法读取整个文件,但保留程序 运行,例如允许用户 select 不同的文件?
  • 中止整个程序?

根据这个问题的答案,异常可能是也可能不是您问题的答案。

假设,我们讨论的方法是这样的:

    public List<FancyObject> readFromTextFile(File file) { ... }

它逐行读取文本文件并将每行一个FancyObject放入结果List

在Java中,一个方法只能return一个结果或抛出一个异常。所以在第一种和第二种情况下,你想要得到一个结果(至少从短行中),你不能抛出异常。

在第三种情况下,我建议您在发现超过 50 个字符的行时立即抛出异常(正如 eddySoft 所建议的那样)。

即使在第四种情况下,我也不会将 System.exit() 放入 readFromTextFile() 方法中,而是放在负责控制整个应用程序的某些更高级别的方法中,例如main()。这是可读性或 "principle of least surprise" 的问题。没有人期望名为 readFromTextFile() 的方法能够完全中止 Java 虚拟机。因此,即使在这种情况下,我也会让方法抛出它的 LineLimitException,并让 main() 捕捉到它,通知用户并执行 System.exit().