【发布时间】:2013-09-05 20:14:44
【问题描述】:
我在使用 Java 中为给定文档创建单词到频率图的程序时遇到问题。当我打印出所有单词时,我仍然将“”视为“单词”。
这里是转述的代码:
String delimiters = "[^a-zA-Z0-9]+";
String[] words;
SortedSet<String> allWords = new TreeSet<String>();
Map<String, Map<String, Integer>> wordMap = new HashMap<String, Map<String, Integer>>();
while ((line = bufferedReader.readLine()) != null) {
words = line.split(delimiters);
for all words add the word to the allWords set and the wordMap
}
for (String word : allWords) {
System.out.println(word + " : " + wordMap.get(word).entrySet());
}
这是一些示例输出:
Time elapsed: 0.75 seconds.
: [books/dickens.txt=7] // WHAT ARE YOU?!?! How does this happen??!?!
10 : [books/dickens.txt=2]
11th : [books/dickens.txt=2]
12th : [books/dickens.txt=2]
这个空白是如何出现的? 谢谢
ps 如果你想在这里看到完整的代码是a link
【问题讨论】:
-
@SotiriosDelimanolis 除了大小写字母和数字之外的所有内容?? ^ 表示不是。
-
不是空格,是空字符串。在
for (int k = 0; k < words.length; k++) {之后只需输入if (words[k].length == 0) continue; -
每个将 Sotirios 的评论标记为有用的人都缺乏对正则表达式的理解。
-
@SeanBright 我认为他们误读了这个问题,并认为它在问为什么
[^a-zA-Z0-9]+匹配空白。但无论哪种方式,这都不是一个有用的评论,因为^的使用实际上并不是问题。
标签: java regex string inverted-index