嵌套的 While 循环没有正确计算两个文件
Nested While loop not counting two files correctly
我正在开发一个从命令行获取文件的程序。然后将该文件与文本文件进行比较,以查看其中是否包含某些单词。如果是这样,我希望它在每次找到特定单词时增加一个计数器。
我认为我在正确的轨道上,使用 while 循环使文件完成,并使用 contains 查看两个文件中是否存在单词。
但是,当我输出数字时,它只是文本文件中的单词总数!我不确定这是为什么。我是 java 的新手,所以我对此不太满意哈哈,如有任何帮助,我们将不胜感激
String fname = args[0]; // input file of text
String words1;
String words2;
int numWords = 0; // total number of words
FileInputStream fileKeywords = new FileInputStream("Keywords.txt");
Scanner keywords = new Scanner(fileKeywords);
keywords.useDelimiter("[^a-zA-Z']+"); // delimiters are nonletters,'
FileInputStream fileJava = new FileInputStream(args[0]);
Scanner java = new Scanner(fileJava);
java.useDelimiter("[^a-zA-Z']+"); // delimiters are nonletters,'
while (java.hasNext()) {
words1 = java.next();
while (keywords.hasNext()) {
words2 = keywords.next();
if (words2.contains(words1)) {
numWords++;
}
}
}
words2
是 一个单词 。 contains
这里是 'string contains' 代码。例如,"Hello".contains("ell")
为真。您的意图是 words2
是 所有 个关键字,但是..它不是。
while 循环?只需删除它并重新开始:
- 首先,阅读 ALL 关键字(是的,这涉及一个单一的 non-nested while 循环)并将它们存储在擅长于此的数据类型中。
HashSet
似乎是最好的,但如果这让您害怕,如果关键字列表少于 ~1000 个左右的单词,ArrayList
就可以完成工作。
- 然后循环一次,通过你的 'second scanner',扫描输入文件,(
java
似乎是一个非常非常糟糕的名字 - 变量名非常重要)。确保您调用的 contains
调用是在某种集合类型(ArrayList 或 HashSet)上,而不是在字符串上。
我正在开发一个从命令行获取文件的程序。然后将该文件与文本文件进行比较,以查看其中是否包含某些单词。如果是这样,我希望它在每次找到特定单词时增加一个计数器。
我认为我在正确的轨道上,使用 while 循环使文件完成,并使用 contains 查看两个文件中是否存在单词。
但是,当我输出数字时,它只是文本文件中的单词总数!我不确定这是为什么。我是 java 的新手,所以我对此不太满意哈哈,如有任何帮助,我们将不胜感激
String fname = args[0]; // input file of text
String words1;
String words2;
int numWords = 0; // total number of words
FileInputStream fileKeywords = new FileInputStream("Keywords.txt");
Scanner keywords = new Scanner(fileKeywords);
keywords.useDelimiter("[^a-zA-Z']+"); // delimiters are nonletters,'
FileInputStream fileJava = new FileInputStream(args[0]);
Scanner java = new Scanner(fileJava);
java.useDelimiter("[^a-zA-Z']+"); // delimiters are nonletters,'
while (java.hasNext()) {
words1 = java.next();
while (keywords.hasNext()) {
words2 = keywords.next();
if (words2.contains(words1)) {
numWords++;
}
}
}
words2
是 一个单词 。 contains
这里是 'string contains' 代码。例如,"Hello".contains("ell")
为真。您的意图是 words2
是 所有 个关键字,但是..它不是。
while 循环?只需删除它并重新开始:
- 首先,阅读 ALL 关键字(是的,这涉及一个单一的 non-nested while 循环)并将它们存储在擅长于此的数据类型中。
HashSet
似乎是最好的,但如果这让您害怕,如果关键字列表少于 ~1000 个左右的单词,ArrayList
就可以完成工作。 - 然后循环一次,通过你的 'second scanner',扫描输入文件,(
java
似乎是一个非常非常糟糕的名字 - 变量名非常重要)。确保您调用的contains
调用是在某种集合类型(ArrayList 或 HashSet)上,而不是在字符串上。