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