捕获以前的错误

时间:2012-02-14 22:20:04

标签: java arrays swing exception jtextarea

我正在为文本文件进行自定义验证。这是第一次对整个文件进行验证。如果有错误,则显示在另一个JTextArea中。之后,仅对那些可见的部分进行验证。我的问题是我无法存储以前的错误并结合当前显示的错误。例如,第一次,我得到错误 第1行,第5行,第6行,第100行,第500行。从下一次可见部分将是1-50行,验证将仅针对1-50进行,因此100和500的误差将消失。我通过将先前的错误存储在临时变量中来尝试它,接下来的问题是,现在私有错误将只变为1-50,有人可以告诉我如何去做吗?

我试过的代码,

      private void displayError() {
      errorText.setText(null); 
      String err = null;
      try{
        //tempErrors
        if(!prevErrors.isEmpty()){
            for(int i=0; i< prevErrors.size(); i++){
                err = prevErrors.get(i).toString();
                if(!errors.contains(err)){
                    errors.add(prevErrors.get(i).toString());
                }
            }
        }
    }
    catch(Exception ex){
        System.out.println(ex);
    }        

    Iterator it = errors.iterator();
    while(it.hasNext()){
        errorText.append(it.next() + "\n");
    }

    prevErrors = new ArrayList();        
    for(int i=0; i< errors.size(); i++){
       prevErrors.add(errors.get(i).toString());
    }
}

1 个答案:

答案 0 :(得分:5)

使用TreeMap

可以更简单地解决您的问题
  1. 创建TreeMap<Integer, String>并将其命名为errors。 (键是行号,值是错误信息。)
  2. 解析文件一次并填充errors - 地图中找到的错误(和行)
  3. 当文件的一部分可见时,您可以使用subMap方法来获取该部分中的错误:

    SortedMap<Integer, String> visibleErrors = errors.subMap(fromLine, toLine + 1);