Java 将文本文件中的单词读入数组

Java 将文本文件中的单词读入数组,java,arrays,dictionary,file-io,java.util.scanner,Java,Arrays,Dictionary,File Io,Java.util.scanner,我正在尝试做一个拼写检查程序。我想将字典文件中的单词读入数组,然后将另一个文本文件中的单词与该字典数组进行比较,最后打印出拼写错误的单词。我面临的问题是,我的扫描器将单词作为一个长字符串读取。如果运行该程序,您会看到它将变量word显示为文本文件的全部内容,并且它只运行一次二进制搜索比较(我认为这意味着字典数组只有一个元素)。下面是我的代码,请给我任何你可能有的建议。提前谢谢 import java.io.File; import java.io.FileNotFoundException; i

我正在尝试做一个拼写检查程序。我想将字典文件中的单词读入数组,然后将另一个文本文件中的单词与该字典数组进行比较,最后打印出拼写错误的单词。我面临的问题是,我的扫描器将单词作为一个长字符串读取。如果运行该程序,您会看到它将变量
word
显示为文本文件的全部内容,并且它只运行一次二进制搜索比较(我认为这意味着字典数组只有一个元素)。下面是我的代码,请给我任何你可能有的建议。提前谢谢

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

public class spellChecker {

    private String[] dictionaryArray; 

    public static void main(String[] args) throws Exception
    {
        spellChecker spellcheck = new spellChecker();
        spellcheck.textFileRead(spellcheck.dictionaryRead());
    } 

    public String[] dictionaryRead() throws Exception
    {
        Scanner s = new Scanner(new File("dictionary.txt")).useDelimiter("\\s+");
        ArrayList<String> list = new ArrayList<String>();
        while (s.hasNext())
        {
            list.add(s.next());
        }
        s.close();

        dictionaryArray = list.toArray(new String[0]);
        return dictionaryArray;
    }

    public void textFileRead(String [] dictionaryArray) throws Exception
    {
        // Find and read the file
        // Use scanner for input file
        Scanner inputFileScan = new Scanner(new File("test.txt")).useDelimiter("\\s+");

        //Check for next line in text file
        while (inputFileScan.hasNext())
        {
            String word = inputFileScan.next();
            System.out.println("word: " + word);
            binarySearch(word);
        }
        inputFileScan.close();
    }

    public void binarySearch(String word)
    {
        int first = 0;
        int last  = dictionaryArray.length;
        while (first < last) {
          int mid = first + ((last - first) / 2);
          if (word.compareTo(dictionaryArray[mid]) < 0) 
          {
              last = mid;
              System.out.println("reached compare < 0");
          } 
          else if (word.compareTo(dictionaryArray[mid]) > 0) 
          {
              first = mid + 1;
              System.out.println("reached compare > 0");
          } 
          else if (word.compareTo(dictionaryArray[mid]) == 0)
          {
              System.out.println("reached compare = 0");
              break;
          }         
        }  
        if(first >= last)
            System.out.println("reached error word: " + word);
    }
} 


}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.*;
公共类拼写检查器{
私有字符串[]数组;
公共静态void main(字符串[]args)引发异常
{
拼写检查器拼写检查=新建拼写检查器();
拼写检查.textFileRead(拼写检查.dictionaryRead());
} 
公共字符串[]dictionaryRead()引发异常
{
扫描仪s=新扫描仪(新文件(“dictionary.txt”)。使用分隔符(\\s+”);
ArrayList=新建ArrayList();
而(s.hasNext())
{
添加(s.next());
}
s、 close();
dictionaryArray=list.toArray(新字符串[0]);
返回射线;
}
public void textFileRead(字符串[]dictionaryArray)引发异常
{
//查找并读取该文件
//使用扫描仪输入文件
Scanner inputFileScan=new Scanner(新文件(“test.txt”))。使用分隔符(\\s+);
//检查文本文件中的下一行
while(inputFileScan.hasNext())
{
String word=inputFileScan.next();
System.out.println(“word:+word”);
二进制搜索(word);
}
inputFileScan.close();
}
公共void二进制搜索(字符串字)
{
int first=0;
int last=dictionaryArray.length;
while(第一次<最后一次){
int mid=first+((last-first)/2);
if(word.compareTo(dictionaryArray[mid])<0
{
最后=中期;
System.out.println(“达到比较<0”);
} 
else if(word.compareTo(dictionaryArray[mid])>0)
{
第一个=中间+1;
System.out.println(“到达比较>0”);
} 
else if(word.compareTo(dictionaryArray[mid])==0)
{
System.out.println(“到达比较=0”);
打破
}         
}  
如果(第一个>=最后一个)
System.out.println(“到达的错误字:“+word”);
}
} 
}

看起来不错,我认为“\\s*”是错误的,应该是“\\s+”允许“零宽度”,这可能根本不是您想要的。您是对的!谢谢你的关注。不过,它似乎不想将
word
变量与
dictionaryArray
进行比较。
binarySearch()
有什么缺陷吗?我发现了逻辑错误。我需要删除最后一个
else
语句,并将
println
移到while循环之外。当
word
等于
dictionaryArray[mid]
时,我还在while look中添加了一个中断。我更新了代码,以防从事类似项目的其他人需要一些示例。