将文本文件中的唯一单词添加到 ArrayList 的程序

Program that adds unique words from text file to an ArrayList

我正在编写一个程序,该程序读取包含多行文本的文本文件并将唯一的单词添加到 ArrayList。然后,我需要对这个 ArrayList 进行排序并打印它。 我的输入是:

Hello my
my name is
Java.

我最初认为我的问题是一旦扫描器命中一个已经在 ArrayList 中的单词,它就停止了。但是,在更改输入后,我不知道我的问题是什么了。 我现在的输出是:

There are 2 unique word(s)
These words are:
is
my

我需要我的输出是:

There are 5 unique word(s)
These words are:
Hello
Java
is
my
name

这是我的代码:

import java.util.*;
import java.io.*;
public class Indexer
{
   public static void main(String[] args) throws FileNotFoundException
   {
      Scanner fileScanner = new Scanner(new File("File.txt"));
      fileScanner.useDelimiter("[^A-Za-z0-9]");
      ArrayList<String> words = new ArrayList<String>();
      while (fileScanner.hasNext())
      { 
         if (!words.contains(fileScanner.next()) && (fileScanner.hasNext()))
         {
           words.add(fileScanner.next());
         }
      }
      Collections.sort(words);
      System.out.println("There are " +  words.size() + " unique word(s)");
      System.out.println("These words are:");
      for (Iterator<String> it = words.iterator(); it.hasNext();) 
      {
          String f = it.next();
          System.out.println(f);
      }
      fileScanner.close();
   }
}

我做错了什么?

首先不要在循环内调用 scanner.next() 两次

  ArrayList<String> words = new ArrayList<String>();
  while (fileScanner.hasNext())
  { 
     String word = fileScanner.next();
     if (!words.contains(word))
     {
       words.add(word);
     }
  }

您重复使用 next(),超出了应有的使用范围。将 next() 调用的值收集到一个变量中,然后改用它。例如

while (fileScanner.hasNext())
    {
        String nextWord = fileScanner.next();
        if (!words.contains(nextWord))
        {
            words.add(nextWord);
        }
    }

问题出在这里:

     if (!words.contains(fileScanner.next()) && (fileScanner.hasNext()))
     {
       words.add(fileScanner.next());
     }

每次调用 next() 都会读取另一个单词。所以在上面的代码中,您正在读取和测试一个单词,然后读取并添加下一个单词。这是不正确的。你不想扔掉的话...

提示:使用局部变量来保存您刚刚阅读的单词...