Search code examples
javaspell-checking

Is there a way for my spellchecker to properly work


The problem is my spellchecker, that I am trying to make. I have a dictionary file that contains large amount of words to compare with the user input so it can detect any possible spelling errors. The problem with mine, is that regardless of what you type it will always say that the spelling is incorrect when it is not. Is there any solution or a better method to detect selling errors of the user input.

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;


public class SpellChecker2 {

public static void main(String[] args) throws FileNotFoundException
{

    Scanner input = new Scanner(System.in);
    System.out.println("Please enter a String"); 
    String userWord = input.nextLine();

    final String theDictionary = "dictionary.txt";

    String[] words = dictionary(theDictionary);
    boolean correctSpelling = checking(words, userWord);

if (!correctSpelling)
    {
    System.out.println("Incorrect spelling");
    }
else 
    {
    System.out.println("The spelling is correct");
    }

}

public static String[] dictionary(String filename) throws FileNotFoundException
{
    final String fileName = "dictionary.txt";

    Scanner dictionary = new Scanner(new File(fileName));
    int dictionaryLength =0;
    while (dictionary.hasNext())
    {
        ++dictionaryLength;
        dictionary.nextLine();
    }


    String [] theWords = new String[dictionaryLength];
        for ( int x = 0; x < theWords.length ; x++)


        dictionary.close();
    return theWords;
}


public static boolean checking(String[] dictionary, String userWord)
{
boolean correctSpelling = false;

    for ( int i =0; i < dictionary.length; i++)
    {
        if (userWord.equals(dictionary[i]))
        {
            correctSpelling = true;
        }
        else 
            correctSpelling = false;
    }
    return correctSpelling;
}


}

The result I get is:

           Please enter a String
           hello
           Incorrect spelling

As you can see the, even though my spelling was correct, it gives an error that the spelling was incorrect. Any help would be great and thank you in advance.


Solution

  • Yes. Return from checking on true. As you have it now, it can only be true if the last word matches. Like,

    public static boolean checking(String[] dictionary, String userWord) {
        for ( int i =0; i < dictionary.length; i++) {
            if (userWord.equals(dictionary[i])) {
                return true;
            }
        }
        return false;
    }
    

    Also, you need to populate your dictionary by adding words to your array. And, I would prefer try-with-resources over explicit close() calls. Something like,

    public static String[] dictionary(String filename) throws FileNotFoundException {
        final String fileName = "dictionary.txt";
        int dictionaryLength = 0, i = 0;
    
        try (Scanner dictionary = new Scanner(new File(fileName))) {
            while (dictionary.hasNextLine()) {
                ++dictionaryLength;
                dictionary.nextLine();
            }
        }
        String[] theWords = new String[dictionaryLength];
        try (Scanner dictionary = new Scanner(new File(fileName))) {
            while (dictionary.hasNextLine()) {
                theWords[i] = dictionary.nextLine();
                i++;
            }
        }
        return theWords;
    }