我有一个拼写检查程序,其中包含以下单词:
玛丽有一点小羊羔 它的羊毛是白色的,如ssnow
玛丽在哪里到处都是 羔羊肯定会去ggo
lambb
,snnow
wentt
和ggo
是故意拼写的。
我编写的代码打印出字典中找到的单词,但无法确定如何打印出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);
}
}
}
}
}
答案 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是您可以进行的第一个更改。