hasNextRine()总是返回false



我正在尝试制作一个拼写检查器,并在链表中打开.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++;
                        }
                    }
                }

相关内容

  • 没有找到相关文章

最新更新