В то время как l oop, похоже, не увеличивается - PullRequest
0 голосов
/ 22 апреля 2020

Мой код в основном выглядит так:


bufferedReader = new BufferedReader(new InputStreamReader(inputFile));

    while ((currentLine = bufferedReader.readLine()) != null) {

         Document document;
         DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
         DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
         document = dBuilder.parse(new InputSource(new StringReader(currentLine)));
         document.getDocumentElement().normalize();
         NodeList nList = document.getElementsByTagName("record");

         int j = 0;
         int k = 0;
         while (j < lines) {
             if (currentLine.contains(bList.get(k))) {
                 myList.add(currentLine);
                 bufferedReader.mark(0);
                 k++;
                 j++;
             }
             else if (myList.size() == bList.size()) {
                 break;
             }
             else {
                 j++;
             }
         }

У меня есть bufferedReader, который построчно просматривает файл. Я хочу, чтобы единственное вхождение строки было добавлено в myList, основываясь на том, содержит ли эта строка строку, которая существует в bList. По какой-то причине, когда я отлаживаю, bList не переходит к следующему индексу, несмотря на увеличение k ++. Я также не уверен, что использование bufferedReader.mark (0) является правильным шагом, я ранее использовал inputFile.getChannel (). Position (0); но меня встретили:

'Ошибка: XML структуры документов должны начинаться и заканчиваться в одной и той же сущности'

Еще одна проблема, которую я заметил при отладке, заключается в том, что в то время как l oop не прерывается, когда размеры myList и bList равны. Вместо этого myList делает все до размера 34, в то время как bList остается с размером 2.

РЕДАКТИРОВАТЬ: Добавлено больше строк для немного контекста и понимания

1 Ответ

0 голосов
/ 22 апреля 2020

k никогда не будет увеличено, если текущая строка не содержит того, что находится в bList @ index k, и поэтому будет застрять в этом слове.

, если currentline содержит вещь в bList else if (myList.size() == bList.size()) не будет выполнена и вы не хотите использовать break, это просто плохой стиль. Вместо этого go для while(... && myList.size() < bList.size())

Также я не понимаю логики c, стоящие за добавлением одной и той же строки в myList несколько раз, вы, вероятно, захотите перебрать другие строки.

Какова цель bufferedReader.mark(0);?

Вот некоторый код, который должен делать то, что вы хотите:

  LinkedList<String> found = new LinkedList<String>();
  while ((currentLine = bufferedReader.readLine()) != null) {
    foreach(String word : bList){
      if(!found.contains(word) && currentline.contains(word)){
        myList.add(currentLine);
        found.add(word);
        break;      
      }
    }
  }

это добавляет каждую строку в myList в первый раз, когда он содержит слово из Blist. в качестве альтернативы вы можете удалить слово из bList, если вам больше не нужен bList.

...