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中添加了一个中断。我更新了代码,以防从事类似项目的其他人需要一些示例。