gpt4 book ai didi

java - 异常打印两次

转载 作者:行者123 更新时间:2023-12-02 08:28:05 27 4
gpt4 key购买 nike

class Patmatch {
static String strLine="";

public static void main(String [] args) {
try {
FileInputStream fstream = new FileInputStream("c://abc.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br1 = new BufferedReader(new InputStreamReader(in));
while ((strLine = br1.readLine()) != null) {
try {
Patternmatch();
}
catch(NomatchException me) {
System.out.println(me.getMessage());
}
}
in.close();
}
catch(IOException i) {
System.out.println("exec:"+i);
}
}

private static void Patternmatch() throws NomatchException {
Pattern p = Pattern.compile("---");
Matcher m = p.matcher(strLine);
if(m.find()) {
System.out.print(m.start());
}
else {
throw new NomatchException("no match");
}
}
}

class NomatchException extends Exception {
NomatchException(String s) {
super(s);
}
}

在上面的代码中,异常不匹配被打印了两次。

我有 abc.txt,但没有模式 ---。

我可以理解,在 main 中我捕获了这个异常,并且在 NomatchException() 中我也抛出了这个异常,但是如果我删除 try... catch 它会显示错误,如果 nomatchException() 中的删除没有显示任何内容。

我现在应该做什么来纠正它?

最佳答案

您只调用 System.out.print() 一次,但您是在 while 循环中执行的。也许您在 abc.txt 末尾有多余的行,这会导致循环继续。

编辑回应评论:

What shoud i do even if i have so many lines exception should be printed once but if i have --- in many places all those positions must be printed?

首先 - 请注意,异常不应该用于控制程序的流程 - 一般来说,它们只在特殊情况下发生。

现在,如果您想表明您在 abc.txt 中发现至少 1 个不匹配的行,那么您可以重新设计您的程序,以便您的 Patternmatch() 将返回一个 boolean 结果,并且根据该返回值,您可以增加一个新的 errorCnt 字段。如果这个新计数器大于零,您可以打印您的信息消息。

但是,如果您只想忽略文本中出现空行的错误,则可以在 Patternmatch() 方法中进行简单的测试来测试 的长度>trim() 的字符串:

  if (strLine.trim().length() > 0 ) {
//do your test
}

另外 - 关于 Java 命名的注释。类名以大写字母开头(因此 nomatchException 应为 NomatchException),方法名称以小写字母开头(Patternmatch() 应为 patternmatch())。

关于java - 异常打印两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4042963/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com