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()
.
我有一个程序,每行都从一个 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()
.