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

时间:2015-04-05 02:53:12

标签: java arraylist java.util.scanner

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

  

你好我的   我的名字是   Java的。

我原本以为我的问题是,一旦扫描仪击中了已存在于ArrayList中的单词,它就会停止。但是,在改变我的输入后,我不知道我的问题是什么了。 我的输出现在是:

  

有两个独特的单词
  这些话是:
  是
  我

我需要输出:

  

有5个独特的单词
  这些话是:
  你好
  Java的
  是
  我
  命名

这是我的代码:

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();
   }
}

我做错了什么?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

你反复使用next(),比应该使用的更多。在变量中收集next()调用的值,然后使用它。 E.g。

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

答案 2 :(得分:1)

问题在于:

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

每次拨打next()都会读到另一个字。因此,在上面的代码中,您正在阅读和测试一个单词,然后阅读并添加下一个单词。这是不正确的。你不想丢掉话语......

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