请完成以下题目:一、对于用户输入的一个字符串(每个单词之间用空格分隔),请至少用两种方法实现单词统计。要求:1.输入数据为空格分隔的字符串;2.输出数据为字符串中每个单词及该单词出现的频次。
时间: 2023-05-30 07:04:08 浏览: 144
统计字符串中每个单词出现的个数和频率—-四种方法
方法一:
1. 将字符串按空格分割成单词数组
2. 遍历单词数组,使用HashMap统计每个单词出现的频次
3. 输出每个单词及其出现的频次
代码如下:
```
import java.util.*;
public class WordCount {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
String[] words = input.split("\\s+"); // 按空格分割字符串
Map<String, Integer> wordCount = new HashMap<>();
for (String word : words) {
if (wordCount.containsKey(word)) {
wordCount.put(word, wordCount.get(word) + 1); // 单词已存在,频次加1
} else {
wordCount.put(word, 1); // 单词不存在,频次为1
}
}
for (Map.Entry<String, Integer> entry : wordCount.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue()); // 输出每个单词及其出现的频次
}
}
}
```
方法二:
1. 将字符串按空格分割成单词数组
2. 使用Stream API对单词数组进行处理,统计每个单词出现的频次
3. 输出每个单词及其出现的频次
代码如下:
```
import java.util.*;
import java.util.stream.*;
public class WordCount {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
String[] words = input.split("\\s+"); // 按空格分割字符串
Map<String, Long> wordCount = Arrays.stream(words)
.collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting())); // 统计每个单词出现的频次
wordCount.entrySet().stream()
.sorted(Map.Entry.<String, Long>comparingByValue().reversed())
.forEach(entry -> System.out.println(entry.getKey() + " " + entry.getValue())); // 输出每个单词及其出现的频次
}
}
```
注:方法二使用了Stream API的groupingBy和counting方法,可以更简单地实现单词统计。同时,为了输出结果按频次从高到低排序,使用了sorted方法和comparingByValue方法。
阅读全文