使用Scanner类和正则表达式统计一篇英文中的单词,要求如下: 统计一共出现了多少个单词。 统计有多少个互不相同的单词。 按单词出现频率的大小输出单词。
时间: 2023-06-07 10:08:17 浏览: 78
你好,这是一个问题涉及编程技术的问题。我可以为您提供一些帮助。
1. 统计总共出现了多少个单词:
您可以使用Scanner类读取整篇文章,然后使用正则表达式将文章中的每个单词提取出来,最后将提取出的单词数量统计即可。
示例代码:
Scanner scanner = new Scanner(file);
int wordCount = 0;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] words = line.split("\\W+");
for (String word : words) {
wordCount++;
}
}
System.out.println("总共出现了" + wordCount + " 个单词");
2. 统计有多少个互不相同的单词:
您可以使用Set来存储提取出来的单词,因为Set不允许存储重复的元素,所以可以利用它来统计互不相同的单词数量。
示例代码:
Scanner scanner = new Scanner(file);
Set<String> wordSet = new HashSet<>();
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] words = line.split("\\W+");
for (String word : words) {
wordSet.add(word.toLowerCase());
}
}
System.out.println("共有" + wordSet.size() + "个互不相同的单词");
3. 按单词出现频率的大小输出单词:
您可以使用Map来存储单词和它们出现的次数,然后按照出现次数进行排序。
示例代码:
Scanner scanner = new Scanner(file);
Map<String, Integer> wordMap = new HashMap<>();
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] words = line.split("\\W+");
for (String word : words) {
String lowerCaseWord = word.toLowerCase();
int count = wordMap.getOrDefault(lowerCaseWord, 0);
wordMap.put(lowerCaseWord, count + 1);
}
}
List<Map.Entry<String, Integer>> wordList = new ArrayList<>(wordMap.entrySet());
Comparator<Map.Entry<String, Integer>> comparator = new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue() - o1.getValue();
}
};
wordList.sort(comparator);
for (Map.Entry<String, Integer> entry : wordList) {
System.out.println(entry.getKey() + " 出现了 " + entry.getValue() + " 次");
}
希望能对您有所帮助。