对于某个给定的英文网页,编写一个处理程序统计该网页中每个单词出现的次数 要求: <a>. 输入一个英文网页地址,下载该网页的内容; <b>. 提取该网页中的文本内容; <c>. 统计文本内容中各单词出现的频次,并按降序排列。java
时间: 2025-06-09 14:01:15 浏览: 14
为了编写这样一个Java程序来统计英文网页中每个单词的出现次数,你可以按照以下步骤操作:
1. **获取网页内容**:
使用`java.net.URL`和`java.io`包中的方法,如`URLConnection`和`BufferedReader`,来读取并下载指定的网页内容。例如:
```java
import java.net.URL;
import java.io.BufferedReader;
import java.io.InputStreamReader;
URL url = new URL("输入的网页地址");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
StringBuilder contentBuilder = new StringBuilder();
while ((line = reader.readLine()) != null) {
contentBuilder.append(line);
}
reader.close();
String pageContent = contentBuilder.toString();
```
2. **提取文本内容**:
需要去除HTML标签和特殊字符,只保留纯文本。可以使用正则表达式或者第三方库如Jsoup来完成这个任务:
```java
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
Document doc = Jsoup.parse(pageContent, "html", "", Parser.xml); // 如果不需要解析XML,直接用"html"
String cleanedContent = doc.text().replaceAll("\\W+", "");
```
3. **分词并统计单词频率**:
将清理后的文本转换成单词数组,然后使用HashMap存储单词及其出现次数。遍历数组并更新字典:
```java
import java.util.HashMap;
String[] words = cleanedContent.split("\\s+");
HashMap<String, Integer> wordCountMap = new HashMap<>();
for (String word : words) {
wordCountMap.put(word, wordCountMap.getOrDefault(word, 0) + 1);
}
```
4. **排序单词计数**:
使用`Collections.sort()`方法配合自定义比较器,将结果按降序排列:
```java
List<Map.Entry<String, Integer>> sortedList = new ArrayList<>(wordCountMap.entrySet());
Collections.sort(sortedList, new Comparator<Map.Entry>() {
public int compare(Map.Entry<String, Integer> e1, Map.Entry<String, Integer> e2) {
return e2.getValue().compareTo(e1.getValue());
}
});
```
5. **打印结果**:
最后,可以遍历排序后的列表,显示每个单词及其出现次数:
```java
for (Map.Entry<String, Integer> entry : sortedList) {
System.out.println("Word: " + entry.getKey() + ", Count: " + entry.getValue());
}
```
注意:这个示例使用了Jsoup作为HTML解析库,如果你的项目不允许引入外部依赖,也可以选择手动解析HTML。
阅读全文