【发布时间】:2017-09-16 10:06:38
【问题描述】:
我目前正在尝试编写一个程序来计算文本中使用不同单词的次数,然后将这些值附加到哈希图中。在程序的主要部分,我使用扫描仪读取带有文本的文件,然后使用另一个扫描仪启动 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));
}
}
}
}
【问题讨论】:
-
在我看到实际的输入和输出之前,很难理解你的代码逻辑
-
来自扫描仪的输入?以下是它们的示例: 扫描仪主程序(正在处理的字符串):“Den signade dag, som vi nu här se av himmelen until oss nedkomma, han blive oss säll” 扫描仪异常(有例外的文本):han hon en ett och att det i som hade på de inte var den sig så för
-
你需要分享你的完整代码。
-
完成,代码分为两个不同的类,我认为我在第二类的过程部分做错了,这就是为什么我只发布它^^
标签: java string hashmap compare java.util.scanner