我正在尝试制作一个拼写检查器,并在链表中打开.txt文件中的单词,但hasNextRine()总是返回false。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.util.LinkedList;
import java.util.Scanner;
public class backEnd {
String string;
String[] splitted;
public backEnd(String s){
string=s;
}
public void splitter(){
splitted =string.split(" ");
for (int x=0; x<splitted.length; x++){
System.out.println(splitted[x]);
}
}
public void spellChecker(){
Serializable data = new String[100];
LinkedList<String> l=new LinkedList<String>();
File f= new File("WordDict.txt");
if(!f.exists())
try {
f.createNewFile();
}
catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
FileInputStream Fis=new FileInputStream(f);
Scanner sc = new Scanner(Fis);
System.out.println("Check outside nextline");
这是它应该从.txt文件中逐行提取单词的地方,但它总是打断循环。
while (sc.hasNextLine()){
System.out.println("Check in nextline");
data = sc.nextLine();
l.add( (String) data);
}
sc.close();
}
catch(FileNotFoundException fnf){
fnf.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
System.out.println("nProgram terminated Safely...");
}
int x=0;
int y=0;
while(x<splitted.length){
while(y<l.size()){
if(l.get(y)==splitted[x]){
System.out.println("Matched.");
y++;
}`enter code here`
}
System.out.println("Wrong spelling of: "+splitted[x]);
x++;
}
}
}
显而易见的原因似乎是文件WordDict.txt
不存在,所以您的代码创建了它,但它是空的,所以它没有下一行。
在这段代码中,在f.createNewFile()
:上放置一个断点
File f= new File("WordDict.txt");
if(!f.exists())
try {
f.createNewFile();
}
catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
FileInputStream Fis=new FileInputStream(f);
Scanner sc = new Scanner(Fis);
System.out.println("Check outside nextline");
另一个明显的原因可能是文件存在,但它是空的。
很可能您的问题是第一个,您的困惑来自于您对执行目录的假设。也就是说,程序可能没有在你想的地方执行。要验证什么,请将WordDict.txt
更改为绝对路径。
sc.hasNextRine()返回true,因为它是一个空文件!!!试着在上面写点什么。
此外,while循环是无限的,并且是不正确的compair(字符串==字符串是错误的):
int x=0;
int y=0;
while(x<splitted.length){
while(y<l.size()){
if(l.get(y)==splitted[x]){
System.out.println("Matched.");
y++;
}`enter code here`
}
System.out.println("Wrong spelling of: "+splitted[x]);
x++;
}
这个循环可能应该是这样的:
int x=0;
int y=0;
while(x<splitted.length){
while(y<l.size()){
if(l.get(y).equals(splitted[x])){
System.out.println("l.get("+ y +") is "+ l.get(y) +", splitted["+x+"] is "+ splitted[x]);
System.out.println("Matched.");
y++;
x++;
}else{
System.out.println("Wrong spelling of: "+splitted[x]);
y++;
}
}
}