Захват предыдущих ошибок - PullRequest
2 голосов
/ 15 февраля 2012

Я делаю пользовательскую проверку для текстовых файлов.Впервые проверка выполняется для всего файла.Ошибки, если таковые имеются, отображаются в другой 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 Ответ

5 голосов
/ 15 февраля 2012

Ваша проблема может быть решена проще с помощью TreeMap:

  1. Создайте TreeMap<Integer, String> и назовите его errors. (Ключ - номер строки, а значение - информация об ошибке.)
  2. Разобрать файл один раз и заполнить errors -карту найденными ошибками (и строками)

Когда часть файла видима, вы используете метод subMap, чтобы получить ошибки в этой части:

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