Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 打印出在ArrayList中找到但不是文件的单词?_Java - Fatal编程技术网

Java 打印出在ArrayList中找到但不是文件的单词?

Java 打印出在ArrayList中找到但不是文件的单词?,java,Java,我有一个拼写检查程序,其中包含以下单词: 玛丽有一只小羊羔 它的羊毛像现在一样白 到处都是玛丽·温特 羔羊一定会吃饱的 lambb、snnowwentt和ggo故意这样拼写 我已经编写了一些代码,可以打印出在字典中找到的单词,但无法确定如何打印出没有找到的单词 以下是我目前的代码: package testDelimeter; import java.io.File; import java.io.FileNotFoundException; import java.util.Array

我有一个拼写检查程序,其中包含以下单词:

玛丽有一只小羊羔 它的羊毛像现在一样白
到处都是玛丽·温特
羔羊一定会吃饱的

lambb
snnow
wentt
ggo
故意这样拼写

我已经编写了一些代码,可以打印出在字典中找到的单词,但无法确定如何打印出没有找到的单词

以下是我目前的代码:

 package testDelimeter;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.util.ArrayList;
 import java.util.Scanner;

public class test {
public static void main(String[] args) throws FileNotFoundException {
    ArrayList<String> dict = new ArrayList<String>();

    File  inFile = new File(
                     "C:\\Users\\Ceri\\workspace1\\testDelimeter\\src\\testDelimeter\\"
                     + "dict" + ".txt");
    Scanner in = new Scanner(inFile);

    File  text = new File(
                     "C:\\Users\\Ceri\\workspace1\\testDelimeter\\src\\testDelimeter\\"
                     + "text" + ".txt");
    Scanner s = new Scanner(text);

    while(in.hasNext()){
        dict.add(in.next());
    }

    while(s.hasNext()){
        String temp = s.next();

        for(int i = 0; i < dict.size(); i++){
            if(temp.equalsIgnoreCase(dict.get(i))){
                System.out.println(dict.get(i) + temp);
            }
        }
    }
}
}
packagetestdelimeter;
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.ArrayList;
导入java.util.Scanner;
公开课考试{
公共静态void main(字符串[]args)引发FileNotFoundException{
ArrayList dict=新的ArrayList();
文件填充=新文件(
“C:\\Users\\Ceri\\workspace1\\testDelimeter\\src\\testDelimeter\\”
+“dict”+“.txt”);
扫描仪输入=新扫描仪(填充);
文件文本=新文件(
“C:\\Users\\Ceri\\workspace1\\testDelimeter\\src\\testDelimeter\\”
+“文本”+“.txt”);
扫描仪s=新扫描仪(文本);
while(在.hasNext()中){
dict.add(in.next());
}
而(s.hasNext()){
字符串temp=s.next();
对于(int i=0;i
在词典中使用a。使用List和set实现的接口的方法
。contains(..)
检查条目是否存在


您不应该将列表用作字典,因为字典没有顺序,可能包含重复的条目。

一种快速方法是引入布尔变量,如下所示:

        boolean isWordFound;
        while (s.hasNext()) {
            String temp = s.next();
            isWordFound = false;
            for (int i = 0; i < dict.size(); i++) {
                if (temp.equalsIgnoreCase(dict.get(i))) {
                    isWordFound = true;
                    System.out.println("Found"+dict.get(i)+temp);
                    break;
                }
            }
            if (!isWordFound) {
                System.out.println("Could not find"+temp);
            }

        }
boolean-isWordFound;
而(s.hasNext()){
字符串temp=s.next();
isWordFound=false;
对于(int i=0;i

也就是说,你的程序有点低效。使用地图而不是列表是您可以做的第一个更改。

您可以做的最佳改进是更改集合的列表。 当顺序很重要时,使用列表,而Set用于唯一元素的无序列表。由于您的词典包含唯一的单词,所以Set更适合您的情况

看看

publicstaticvoidmain(字符串[]args)抛出FileNotFoundException{
Set dict=new HashSet();
文件填充=新文件(
“C:\\Users\\Ceri\\workspace1\\testDelimeter\\src\\testDelimeter\\”
+“dict”+“.txt”);
扫描仪输入=新扫描仪(填充);
文件文本=新文件(
“C:\\Users\\Ceri\\workspace1\\testDelimeter\\src\\testDelimeter\\”
+“文本”+“.txt”);
扫描仪s=新扫描仪(文本);
while(在.hasNext()中){
dict.add(in.next().toLowerCase());
}
而(s.hasNext()){
字符串temp=s.next().toLowerCase();
if(dict.contains(temp)){
系统输出打印项次(“找到”+温度);
}否则{
系统输出打印项次(“未找到”+温度);
}
}
}
编辑:由于OP希望维护列表,代码可以如下所示:

public static void main(String[] args) throws FileNotFoundException {
    List<String> dict = new ArrayList<String>();

    File inFile = new File(
            "C:\\Users\\Ceri\\workspace1\\testDelimeter\\src\\testDelimeter\\"
                    + "dict" + ".txt");
    Scanner in = new Scanner(inFile);

    File text = new File(
            "C:\\Users\\Ceri\\workspace1\\testDelimeter\\src\\testDelimeter\\"
                    + "text" + ".txt");
    Scanner s = new Scanner(text);

    while (in.hasNext()) {
        // Notice toLowerCase()
        dict.add(in.next().toLowerCase());
    }

    while (s.hasNext()) {
        // Notice toLowerCase()
        String temp = s.next().toLowerCase();

        if (dict.contains(temp)) {
            System.out.println("Found " + temp);
        } else {
            System.out.println("Not Found " + temp);
        }
    }
}
publicstaticvoidmain(字符串[]args)抛出FileNotFoundException{
List dict=new ArrayList();
文件填充=新文件(
“C:\\Users\\Ceri\\workspace1\\testDelimeter\\src\\testDelimeter\\”
+“dict”+“.txt”);
扫描仪输入=新扫描仪(填充);
文件文本=新文件(
“C:\\Users\\Ceri\\workspace1\\testDelimeter\\src\\testDelimeter\\”
+“文本”+“.txt”);
扫描仪s=新扫描仪(文本);
while(在.hasNext()中){
//注意下面的小写()
dict.add(in.next().toLowerCase());
}
而(s.hasNext()){
//注意下面的小写()
字符串temp=s.next().toLowerCase();
if(dict.contains(temp)){
系统输出打印项次(“找到”+温度);
}否则{
系统输出打印项次(“未找到”+温度);
}
}
}

仅供参考:我认为OP面临的主要问题是如何打印未找到的单词。你的答案是要求他使用不同的集合,但没有解决实际问题。OP已经找到了一种方法来检查字典中是否有单词,所以你的答案只会给他提供另一种方法。我知道区别,但这是大学的实验工作表,我们必须证明我们理解如何使用它们,无论它们工作得如何好。非常感谢。tough@ceriWestcott看看我的答案。它不会改变您的数据结构,只会改变逻辑的一小部分。这不是你想要的吗?如果我的答案解决了你的问题,别忘了接受答案并投赞成票。我已经编辑了我的答案。我不明白为什么这被否决了,这正是我需要的。
public static void main(String[] args) throws FileNotFoundException {
    List<String> dict = new ArrayList<String>();

    File inFile = new File(
            "C:\\Users\\Ceri\\workspace1\\testDelimeter\\src\\testDelimeter\\"
                    + "dict" + ".txt");
    Scanner in = new Scanner(inFile);

    File text = new File(
            "C:\\Users\\Ceri\\workspace1\\testDelimeter\\src\\testDelimeter\\"
                    + "text" + ".txt");
    Scanner s = new Scanner(text);

    while (in.hasNext()) {
        // Notice toLowerCase()
        dict.add(in.next().toLowerCase());
    }

    while (s.hasNext()) {
        // Notice toLowerCase()
        String temp = s.next().toLowerCase();

        if (dict.contains(temp)) {
            System.out.println("Found " + temp);
        } else {
            System.out.println("Not Found " + temp);
        }
    }
}