Удаление общих английских sh слов из файла - PullRequest
0 голосов
/ 18 января 2020

Этот метод удаляет обычные английские sh слова из списка терминов - я должен удалить все слова, найденные в "commonWords.txt". Кроме того, этот метод не должен вызывать исключение.

terms является частным List из Strings.

private void removeCommonEnglishWords() {            
    Scanner sc = null;

    try {
        sc = new Scanner(new File("commonWords.txt"));
    } catch(Exception e) {
        System.out.println("The file is not found");
    }

    List<String> commonWords = new ArrayList<String>(); 
    int count = 0;
    while(sc.hasNextLine()) {
        count++;
        commonWords.add(sc.nextLine()); 
    }

    Iterator<String> termIt = terms.iterator();
    while(termIt.hasNext()) {
        String term = termIt.next();
        for(String word : commonWords)
            if(term.equalsIgnoreCase(word))
                termIt.remove();
    }
    //terms = listToIterator(termIt); 
}

Это, при запуске, не изменяет условия в все. Но когда я раскомментирую последнюю строку (terms = listToIterator(termIt);), я получаю пустой термин, я думаю. Что я делаю неправильно?

Обновление:

  public static <String> List<String> listToIterator(Iterator<String> iterator)
  {
     List<String> list = new ArrayList<>();
     iterator.forEachRemaining(list::add);
     return list; 
  }

1 Ответ

0 голосов
/ 18 января 2020

Помимо поддельной обработки исключений, в вашем вопросе нет ничего плохого. Это оставляет три возможности:

  1. Файл commonWords.txt, который вы пытаетесь прочитать, не находится в рабочем каталоге, когда / где выполнялась ваша программа.

  2. Список terms пуст для начала с

  3. Что-то не так с вашим методом listToIterator.


ОБНОВЛЕНИЕ

Теперь, когда я вижу метод listToIterator и способ его вызова, проблема ясна.

Метод истощает итератор и добавляет его ( остальное) содержимое в новый список ... который он возвращает. (Это прямо противоположно тому, что говорит его имя!)

Метод в порядке, но проблема в том, что вы вызываете его на итераторе, где метод hasNext() возвратил false. Другими словами, итератор уже опустошен.

Следовательно, список, который он возвращает, будет пустым.

...