用Java统计四级常用单词.txt文档中所有英文字母,出现的次数和频率,并将统计结果按照字母出现频率由高到低排序后输出到目标文件“result.txt”中。 “四级常用单词.txt”的编码方式为UTF-8; 可用字符流读取,并用数组进行统计; 只统计独立出现的单词,并且标注上所有代码的注释
时间: 2024-02-11 20:04:55 浏览: 78
统计指定的文本文件(英文)中,每个单词的出现频率,输出按字典序排列的单词频度表。
好的,让我来解答你的问题。
首先,我们需要读取四级常用单词.txt文档中的内容。由于该文档的编码方式为UTF-8,我们可以使用Java中的InputStreamReader类来读取。代码如下:
```java
File file = new File("四级常用单词.txt"); // 创建File对象
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8"); // 创建InputStreamReader对象
```
接着,我们需要统计文档中每个英文字母出现的次数和频率。我们可以使用一个长度为26的int数组来存储每个字母出现的次数,使用一个整型变量来记录文档中总共出现的英文字母数。统计过程中,我们可以一次读入一个字符,判断该字符是否为英文字母,如果是则将该字母对应的数组元素加一,同时将总数加一。代码如下:
```java
int[] count = new int[26]; // 存储每个字母出现的次数
int total = 0; // 总共出现的英文字母数
int c = 0; // 读入的字符
while ((c = isr.read()) != -1) { // 读取文档中的每个字符
if (c >= 'a' && c <= 'z') { // 判断是否为小写字母
count[c - 'a']++; // 将对应的数组元素加一
total++; // 将总数加一
} else if (c >= 'A' && c <= 'Z') { // 判断是否为大写字母
count[c - 'A']++; // 将对应的数组元素加一
total++; // 将总数加一
}
}
isr.close(); // 关闭InputStreamReader
```
最后,我们需要将统计结果按照字母出现频率由高到低排序后输出到目标文件“result.txt”中。我们可以使用一个长度为26的Map来存储每个字母及其出现次数,然后使用Java中的Collections工具类对Map进行排序,最后按照要求输出到文件中。代码如下:
```java
Map<Character, Integer> map = new HashMap<Character, Integer>(); // 存储每个字母及其出现次数
for (int i = 0; i < 26; i++) {
map.put((char)('a' + i), count[i]); // 将字母及其出现次数存入Map中
}
List<Map.Entry<Character, Integer>> list = new ArrayList<Map.Entry<Character, Integer>>(map.entrySet()); // 将Map转换为List
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() { // 对List进行排序
public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
return o2.getValue() - o1.getValue(); // 按照出现次数由高到低排序
}
});
FileWriter fw = new FileWriter("result.txt"); // 创建FileWriter对象
for (Map.Entry<Character, Integer> entry : list) { // 遍历List
double frequency = (double)entry.getValue() / total * 100; // 计算出现频率
fw.write(entry.getKey() + " " + entry.getValue() + " " + String.format("%.2f", frequency) + "%\n"); // 输出到文件中
}
fw.close(); // 关闭FileWriter
```
完整代码如下:
```java
import java.io.*;
import java.util.*;
public class CountLetters {
public static void main(String[] args) throws IOException {
File file = new File("四级常用单词.txt"); // 创建File对象
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8"); // 创建InputStreamReader对象
int[] count = new int[26]; // 存储每个字母出现的次数
int total = 0; // 总共出现的英文字母数
int c = 0; // 读入的字符
while ((c = isr.read()) != -1) { // 读取文档中的每个字符
if (c >= 'a' && c <= 'z') { // 判断是否为小写字母
count[c - 'a']++; // 将对应的数组元素加一
total++; // 将总数加一
} else if (c >= 'A' && c <= 'Z') { // 判断是否为大写字母
count[c - 'A']++; // 将对应的数组元素加一
total++; // 将总数加一
}
}
isr.close(); // 关闭InputStreamReader
Map<Character, Integer> map = new HashMap<Character, Integer>(); // 存储每个字母及其出现次数
for (int i = 0; i < 26; i++) {
map.put((char)('a' + i), count[i]); // 将字母及其出现次数存入Map中
}
List<Map.Entry<Character, Integer>> list = new ArrayList<Map.Entry<Character, Integer>>(map.entrySet()); // 将Map转换为List
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() { // 对List进行排序
public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
return o2.getValue() - o1.getValue(); // 按照出现次数由高到低排序
}
});
FileWriter fw = new FileWriter("result.txt"); // 创建FileWriter对象
for (Map.Entry<Character, Integer> entry : list) { // 遍历List
double frequency = (double)entry.getValue() / total * 100; // 计算出现频率
fw.write(entry.getKey() + " " + entry.getValue() + " " + String.format("%.2f", frequency) + "%\n"); // 输出到文件中
}
fw.close(); // 关闭FileWriter
}
}
```
希望我的回答能够帮助到你!
阅读全文