java将txt文档预处理为以字符串为键、整数ArrayList为值的hashmap
为了完成一项作业,我被要求将一个txt文档预处理成一个hashmap,以便有一个高效的单词搜索功能。为了实现高效的单词搜索,您的代码将对文档进行预处理,并将文档中找到的所有单词以及它们在哈希表中找到的行(单词是键,行是值)我一辈子都搞不懂为什么我不能用一个新值替换一个键中的旧值。这是预处理文档的构造函数
HashMap<String, ArrayList<Integer>> map = new HashMap<String, ArrayList<Integer>>();
public wordSearch() {
char charChecker;
String word;
ArrayList<Integer> count = new ArrayList<Integer>();
try{
URL url = new URL("http://homes.soic.indiana.edu/classes/spring2016/csci/c343-yye/docu.txt");
Scanner in = new Scanner(url.openStream());
int lineNumber = 1;
while(in.hasNext()) {
String str = in.nextLine();
for(int i = 0; i < str.length(); i++) {
for(int j = i+1; j < str.length(); j++) {
charChecker = str.charAt(j);
//check for word
if(charChecker == ' ' ||
charChecker == ',' ||
charChecker == '.' ||
charChecker == '\n') {
word = str.substring(i, j);
//if word is already in HashMap
if(this.map.containsKey(word)) {
count = this.map.get(word);
count.add(lineNumber);
//System.out.println("[" + word + ", " + count.toString() + "]");
this.map.put(word, count);
}
//otherwise add word to HashMap
else {
count.add(lineNumber);
System.out.println(count.toString());
this.map.put(word, count);
//System.out.println("[" + word + ", " + count.toString() + "]");
}
i = j+1;
count.clear();
}
}
}
lineNumber+=1;
}
in.close();
}catch(IOException e) {
System.out.println(e.getMessage());
}
System.out.println(this.map.toString());
}
如果您有任何关于从这里出发的建议,我们将不胜感激
# 1 楼答案
使用
count = new ArrayList<Integer>();
代替count.clear();
现有代码对所有键具有相同的计数实例
# 2 楼答案
另一种方法是检查一个单词的行号是否存在