我的任务是得到这个文件的词频:
test_words_file-1.txt:
The quick brown fox
Hopefully245this---is a quick13947
task&&#%*for you to complete.
But maybe the tASk 098234 will be less
..quicK.
the the the the the the the the the the
我一直试图从这个文件中删除符号和数字,并按字母顺序获得每个单词的频率,结果是:
我可以看到偶数位数已被删除,但仍在计数。您能解释为什么以及如何修复此问题吗?
另外,我如何将 “Hopefully 245 this---is” 分开并存储3个有用的单词 “hopefully”,“this”,“is”?
public class WordFreq2 {
public static void main(String[] args) throws FileNotFoundException {
File file = new File("C:\\Users\\Jason\\Downloads\\test_words_file-1.txt");
Scanner scanner = new Scanner(file);
int maxWordLen = 0;
String maxWord = null;
HashMap<String, Integer> map = new HashMap<>();
while(scanner.hasNext()) {
String word = scanner.next();
word = word.toLowerCase();
// text cleaning
word = word.replaceAll("[^a-zA-Z]+", "");
if(map.containsKey(word)) {
//if the word already exists
int count = map.get(word)+1;
map.put(word,count);
}
else {
// The word is new
int count = 1;
map.put(word, count);
// Find the max length of Word
if (word.length() > maxWordLen) {
maxWordLen = word.length();
maxWord = word;
}
}
}
scanner.close();
//HashMap unsorted, sort
TreeMap<String, Integer> sorted = new TreeMap<>();
sorted.putAll(map);
for (Map.Entry<String, Integer> entry: sorted.entrySet()) {
System.out.println(entry);
}
System.out.println(maxWordLen+" ("+maxWord+")");
}
}
4条答案
按热度按时间ubbxdtey1#
首先是代码。解释出现在下面的代码之后。
由于您的示例文件很小,所以我将整个文件内容加载到
String
中。然后我将整个
String
转换为小写,因为单词的定义是一系列连续的字母,不区分大小写的字符。正则表达式-
[a-z]+
-搜索一个或多个连续的小写字母字符(请记住,整个String
现在都是小写)。每次连续调用方法
find()
都会在String
中找到下一个单词(根据上面单词的定义,即字母表中连续的一系列小写字母)。为了计算字母频率,我使用
TreeMap
,其中Map键是单词,Map值是单词在String
中出现的次数。注意,Map键和值不能是原语,因此值是Integer
而不是int
。如果找到的最后一个单词已经出现在Map中,则增加计数。
如果找到的最后一个单词未出现在Map中,则将其添加到Map中,并将其计数设置为1(一)。
沿着将单词添加到Map中,我还计算了找到的每个单词的字母,以便找到最长的单词。
在处理完整个
String
之后,我打印Map的内容,每行一个条目,最后打印找到的最长单词的字母数。注意,TreeMap
对它的键进行排序,因此单词列表按字母顺序显示。下面是输出:
ki0zmccv2#
我怎样才能把“hopefully 245 this---is”分开并存储3个有用的单词“hopefully”,“this”,“is”?
使用regex API来满足这样的要求。
演示:
输出:
查看以下链接以了解有关Java正则表达式的更多信息:
jw5wzhpr3#
在Java 9或更高版本的Matcher中,#结果可以在流解决方案中使用,如下所示:
输出:
juzqafwq4#
输出:{the=1,this=3,have=1,is=2,word=1}