打印出在ArrayList中找到但没有文件的单词?

时间:2015-02-21 15:36:37

标签: java

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

  玛丽有一点小羊羔   它的羊毛是白色的,如ssnow
  玛丽在哪里到处都是   羔羊肯定会去ggo

lambbsnnow wenttggo是故意拼写的。

我编写的代码打印出字典中找到的单词,但无法确定如何打印出AREN&#T; T发现的单词。

到目前为止,这是我的代码:

 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);
            }
        }
    }
}
}

3 个答案:

答案 0 :(得分:1)

使用java.util.set作为字典。使用List和Sets实现的java.util.collection接口的方法.contains(..)检查是否存在条目。

你不应该使用List作为字典,因为字典没有顺序,可以包含重复的条目。

答案 1 :(得分:0)

你可以做的最好的改进就是改变你的List列表。 列表用于订单很重要时,Set用于无序的唯一元素列表。由于您的词典包含唯一的单词,因此Set更适合您的情况。

查看What is the difference between Set and List?

public static void main(String[] args) throws FileNotFoundException {

    Set<String> dict = new HashSet<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().toLowerCase());
    }

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

        if (dict.contains(temp)) {
            System.out.println("Found " + temp);
        } else {
            System.out.println("Not Found " + 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);
        }
    }
}

答案 2 :(得分:-1)

快速执行此操作的方法是引入一个布尔变量,如下所示:

        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);
            }

        }

话虽这么说,你的程序效率有点低。使用Map而不是list是您可以进行的第一个更改。