我正在尝试编写一个程序(不带其他库),该程序将输入一个文本文件,并制作出一个单词映射图,这些单词以正确的出现次数出现在文本中。问题是,当我尝试用单词和出现次数填充HashMap时,我陷入了困境。在下面,您可以找到我正在使用的代码片段:
public class App {
public static void main(String[] args) {
// TODO Auto-generated method stub
File file = new File("text.txt");
StringBuilder sb = new StringBuilder();
try(BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)))) {
String content = br.readLine();
while(content!=null){
sb.append(content);
sb.append(System.lineSeparator());
content =br.readLine();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
String text = sb.toString();
String[] wordArray = text.split("\\s|\\.\\s|\\,\\s|\\r\\n");
System.out.println(wordArray.length);
LinkedHashMap<String,Integer> wordMap = new LinkedHashMap<>();
wordMap.put(wordArray[0], 1);
for(int i=1; i<wordArray.length;i++){
for(String key : wordMap.keySet()){
if(key.equals(wordArray[i])){
wordMap.put(key, wordMap.get(key)+1);
} else{
wordMap.put(wordArray[i], 1);
}
}
}
for(String key : wordMap.keySet()){
System.out.println(key + " : "+ wordMap.get(key));
}
}
}
我试图使用Iterators对HashMap进行修改,但最终还是遇到了同样的异常。
另一件事是我在拆分文本时也遇到了问题。在wordArray中,存在空值。这些空值出现在该行的最后一个单词之后,因此我想它们是\ r \ n白色符号。不幸的是,在拆分方法中将\ r \ n添加到正则表达式没有任何区别。您还能帮助解决这些问题吗?
先感谢您!
PS:这是我关于stackoverflow的第一个问题,对不起任何错误:)
问题是您要进行迭代,wordMap.keySet()
并在迭代时使用将元素添加到地图wordMap.put
。
您想要做的是:
for(String word : wordArray) {
Integer count = wordMap.get(word);
if(count == null) { // first time for "word" => insert 1
wordMap.put(word, 1);
} else { // else increment the count
wordMap.put(word, count + 1);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句