以下是代码:
Scanner scan = new Scanner(new FileReader ("C:\\mytext.txt"));
HashMap<String, Integer> listOfWords = new HashMap<String, Integer>();
while(scan.hasNextLine())
{
Scanner innerScan = new Scanner(scan.nextLine());
boolean wordExistence ;
while(wordExistence = innerScan.hasNext())
{
String word = innerScan.next();
int countWord = 0;
if(!listOfWords.containsKey(word)){ already
listOfWords.put(word, 1);
}else{
countWord = listOfWords.get(word) + 1;
listOfWords.remove(word);
listOfWords.put(word, countWord);
}
}
}
System.out.println(listOfWords.toString());
问题是,我的输出包含如下字样:
document.Because=1
document.This=1
space.=1
我如何处理正在发生的这个句号?(对于更多问题,我认为任何句子终结符都是问题,如问号或感叹号)。
答案 0 :(得分:2)
查看Scanner API
的课堂笔记,特别是关于使用除空格以外的分隔符的段落。
答案 1 :(得分:2)
Scanner
使用任何空格作为默认分隔符。您可以调用Scanner实例的useDelimiter()
并指定自己的正则表达式作为分隔符。
答案 2 :(得分:1)
答案 3 :(得分:1)
也许你想修补以下速度优化的答案。
final Pattern WORD = Pattern.compile("\\w+");
while(scan.hasNextLine())
{
Scanner innerScan = new Scanner(scan.nextLine());
while(innerScan.hasNext(WORD))
{
String word = innerScan.next(WORD);
if(!listOfWords.containsKey(word)){
listOfWords.put(word, 1);
}else{
int countWord = listOfWords.get(word) + 1;
//listOfWords.remove(word);
listOfWords.put(word, countWord);
}
}
}