      1  import java.util.HashSet;

      2  import java.util.Scanner;

      3  import java.util.Set;

      4  import java.io.File;

      5  import java.io.FileNotFoundException;

      6

      7  /**

      8     This program checks which words in a file are not present in a dictionary.

      9  */

     10  public class SpellCheck

     11  {

     12     public static void main(String[] args)

     13        throws FileNotFoundException

     14     {

     15        // Read the dictionary and the document

     16

     17        Set<String> dictionaryWords = readWords("words");

     18        Set<String> documentWords = readWords("alice30.txt");

     19

     20        // Print all words that are in the document but not the dictionary

     21

     22        for (String word : documentWords)

     23        {

     24           if (!dictionaryWords.contains(word))

     25           {

     26              System.out.println(word);

     27           }

     28        }

     29     }

     30

     31     /**

     32        Reads all words from a file.

     33        @param filename the name of the file

     34        @return a set with all lowercased words in the file. Here, a

     35        word is a sequence of upper- and lowercase letters.

     36     */

     37     public static Set<String> readWords(String filename)

     38        throws FileNotFoundException

     39     {

     40        Set<String> words = new HashSet<String>();

     41        Scanner in = new Scanner(new File(filename));

     42        // Use any characters other than a-z or A-Z as delimiters

     43        in.useDelimiter("[^a-zA-Z]+");

     44        while (in.hasNext())

     45        {

     46           words.add(in.next().toLowerCase());

     47        }

     48        return words;

     49     }

     50  }