使用扫描仪读取文件并排除单词



我目前正在尝试编写一个程序来计算文本中使用不同单词的次数,然后将值附加到哈希图上。在程序的主要部分,我使用扫描仪读取带有文本的文件,并使用另一个扫描仪启动GenWordCtr,该扫描仪应该读取包含我想要排除的单词的文件(像"这个,她,那个"这样的词)。我确保发送到op.process的字符串是小写的,但是当我运行程序时,它仍然添加我希望从统计信息中排除的所有值。我做错了什么?我知道主程序有效,我用单个单词尝试过。

TLDR - 我希望使用扫描仪排除的单词在文本中读取,出于某种原因,它们没有被排除在我的程序的"进程"操作中。

package textproc;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
public class Holgersson {
public static final String[] REGIONS = { "blekinge", "bohuslän", "dalarna", "dalsland", "gotland", "gästrikland",
"halland", "hälsingland", "härjedalen", "jämtland", "lappland", "medelpad", "närke", "skåne", "småland",
"södermanland", "uppland", "värmland", "västerbotten", "västergötland", "västmanland", "ångermanland",
"öland", "östergötland" };
public static void main(String[] args) throws FileNotFoundException {
Scanner s = new Scanner(new File("../lab1/nilsholg.txt"));
Scanner stopwords = new Scanner(new File("undantagsord.txt"));
s.useDelimiter("(\s|,|\.|:|;|!|-|\?|'|\")+"); // se handledning
TextProcessor gen = new GeneralWordCounter(stopwords);
while (s.hasNext()) {
String word = s.next().toLowerCase();
gen.process(word);
}
s.close();
gen.report();
}
}

package textproc;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class GeneralWordCounter implements TextProcessor {
private Map<String, Integer> m;
private Scanner excep;
GeneralWordCounter(Scanner r){
Map<String, Integer> m = new HashMap<String, Integer>();
this.m = m;
excep = r;
}
@Override
public void process(String word) {
// TODO Auto-generated method stub
boolean bin = false;
while(excep.hasNext() && bin == false) {
if(word.equals(excep.next().toLowerCase())) {
bin = true;
}
}
if(!bin) {
if(m.containsKey(word)) {
m.put(word, (m.get(word) + 1));
}
else {
m.put(word, 1);
}
}
}
@Override
public void report() {
// TODO Auto-generated method stub
for(String key : m.keySet()) {
if(m.get(key) >= 200) {
System.out.println(key + " - " + m.get(key));
}
}
}
}

您正在对循环内的stopwords使用相同的 Scanner 实例,该实例可能会在以下几个循环中耗尽。

TextProcessor gen = new GeneralWordCounter(stopwords);
while (s.hasNext()) {
String word = s.next().toLowerCase();
gen.process(word);
}

想象一下,通过这种方式,您已经启动了上面的循环并传递了 Scanner 实例,当您调用process方法时,它开始循环输入单词并到达第二个 Scanner 的文件末尾。现在,在下一个循环中,您再次调用process方法,但这次指针将已经在文件末尾,因为您使用的是同一实例。因此,您不会获得预期的输出。

相反,您需要为每个process方法调用创建新的 Scanner 实例。

public void process(String word) {
Scanner excep = new Scanner(new File("undantagsord.txt"));
// your code.

相关内容

  • 没有找到相关文章

最新更新