用java写一段代码实现以下功能:便用Scanner类和正则表达式统一算英文中的单词,要求如一共出现了多少个单词有多少个互不相同的单·按单词出现频率大小输出单词
时间: 2023-07-14 17:13:49 浏览: 51
以下是实现以上功能的Java代码,使用了Scanner类和正则表达式:
```java
import java.util.*;
import java.util.regex.*;
public class WordCounter {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String text = scanner.nextLine();
// 使用正则表达式匹配所有单词
Pattern pattern = Pattern.compile("\\b\\w+\\b");
Matcher matcher = pattern.matcher(text);
// 统计单词总数和不同单词数
int totalCount = 0;
Set<String> uniqueWords = new HashSet<>();
Map<String, Integer> wordFrequency = new HashMap<>();
while (matcher.find()) {
String word = matcher.group();
totalCount++;
// 将单词转换为小写形式
word = word.toLowerCase();
// 统计单词出现频率
int count = wordFrequency.getOrDefault(word, 0);
wordFrequency.put(word, count + 1);
// 统计不同单词数
uniqueWords.add(word);
}
System.out.println("一共出现了 " + totalCount + " 个单词");
System.out.println("有 " + uniqueWords.size() + " 个互不相同的单词");
// 按单词出现频率大小输出单词
List<Map.Entry<String, Integer>> wordFrequencyList = new ArrayList<>(wordFrequency.entrySet());
Collections.sort(wordFrequencyList, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> e1, Map.Entry<String, Integer> e2) {
return e2.getValue().compareTo(e1.getValue());
}
});
System.out.println("按单词出现频率大小输出单词:");
for (Map.Entry<String, Integer> entry : wordFrequencyList) {
System.out.println(entry.getKey() + " " + entry.getValue());
}
}
}
```
使用示例:
输入:
```
This is a test. This is only a test.
```
输出:
```
一共出现了 9 个单词
有 6 个互不相同的单词
按单词出现频率大小输出单词:
this 2
a 2
test 2
is 2
only 1
```