例外打印两次

时间:2010-10-28 12:36:00

标签: java file-io

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);
  }
}

在上面的代码中,Exception没有打印两次匹配。

我有abc.txt,我没有这种模式---。

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

我现在应该怎么做才能纠正它?

3 个答案:

答案 0 :(得分:2)

您只需拨打System.out.print()一次,但是您是在while循环中进行的。也许你在abc.txt的末尾有额外的行,这会导致你的循环继续。

编辑回应评论:

  

即使我有这么多行例外,我应该打印一次但是如果我有 - 在很多地方都必须打印所有这些位置?

首先 - 请注意,不应使用例外来控制程序的流程 - 通常,它们仅在特殊情况下发生。

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

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

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

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

答案 1 :(得分:0)

我同意akf - 异常应该是例外。控制逻辑流程的另一种方法可能是:

while (((strLine = br1.readLine()) != null)) {
   if (!Patternmatch())
      System.out.println("no match");
}

并修改您的Patternmatch()

private static boolean Patternmatch() throws NomatchException {       
   Pattern p = Pattern.compile("---");        
   Matcher m = p.matcher(strLine);         

   return m.find();
}

答案 2 :(得分:0)

文本文件中必须有两行不匹配。

正如其他人所说,这是对例外情况的不良使用。让patternMatch()方法返回一个布尔值。