有一个txt文件,每行一个成语详细信息,读入这个文件,以“拼音:”将成语和其他信息分割开来,统计每个成语的末尾字在该文件的成语中有多少个成语的首字与它相同,将统计结果以加在每行末尾的形式重新输出在另一个文件,用java代码写
时间: 2024-03-14 10:43:06 浏览: 11
好的,这是一个比较复杂的任务,需要用到文件读写和字符串处理等知识。我来为您提供一份Java代码,希望对您有所帮助。
首先,我们需要读入这个txt文件,可以使用Java的FileReader和BufferedReader类来实现,然后逐行读取:
```
try {
FileReader fr = new FileReader("idioms.txt");
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
// TODO: 处理每行数据
}
br.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
```
接下来,我们需要处理每行数据,将成语和拼音信息分开,可以使用Java的字符串处理函数,比如split方法:
```
String[] parts = line.trim().split(":");
String idiom = parts[0];
String pinyin = parts[1];
```
然后,我们需要统计每个成语的末尾字在该文件的成语中有多少个成语的首字与它相同。这个可以使用Java的HashMap来实现,将末尾字作为HashMap的key,对应的值为一个列表,列表中存储所有以该字开头的成语。统计末尾字相同的成语数量时,只需要统计对应列表的长度即可。
```
HashMap<Character, ArrayList<String>> idiomMap = new HashMap<>();
while ((line = br.readLine()) != null) {
String[] parts = line.trim().split(":");
String idiom = parts[0];
String pinyin = parts[1];
char tail = idiom.charAt(idiom.length() - 1);
if (!idiomMap.containsKey(tail)) {
idiomMap.put(tail, new ArrayList<String>());
}
idiomMap.get(tail).add(idiom);
}
ArrayList<String> result = new ArrayList<>();
while ((line = br.readLine()) != null) {
String[] parts = line.trim().split(":");
String idiom = parts[0];
String pinyin = parts[1];
char tail = idiom.charAt(idiom.length() - 1);
int count = idiomMap.get(tail).size() - 1;
result.add(line.trim() + " " + count);
}
```
最后,我们将结果写入另一个文件,可以使用Java的FileWriter和BufferedWriter类,将结果逐行写入。
```
try {
FileWriter fw = new FileWriter("result.txt");
BufferedWriter bw = new BufferedWriter(fw);
for (String line : result) {
bw.write(line);
bw.newLine();
}
bw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
```
完整代码如下:
```
import java.io.*;
import java.util.*;
public class IdiomProcessor {
public static void main(String[] args) {
try {
FileReader fr = new FileReader("idioms.txt");
BufferedReader br = new BufferedReader(fr);
String line;
HashMap<Character, ArrayList<String>> idiomMap = new HashMap<>();
while ((line = br.readLine()) != null) {
String[] parts = line.trim().split(":");
String idiom = parts[0];
String pinyin = parts[1];
char tail = idiom.charAt(idiom.length() - 1);
if (!idiomMap.containsKey(tail)) {
idiomMap.put(tail, new ArrayList<String>());
}
idiomMap.get(tail).add(idiom);
}
br.close();
fr.close();
ArrayList<String> result = new ArrayList<>();
FileReader fr2 = new FileReader("idioms.txt");
BufferedReader br2 = new BufferedReader(fr2);
while ((line = br2.readLine()) != null) {
String[] parts = line.trim().split(":");
String idiom = parts[0];
String pinyin = parts[1];
char tail = idiom.charAt(idiom.length() - 1);
int count = idiomMap.get(tail).size() - 1;
result.add(line.trim() + " " + count);
}
br2.close();
fr2.close();
FileWriter fw = new FileWriter("result.txt");
BufferedWriter bw = new BufferedWriter(fw);
for (String line2 : result) {
bw.write(line2);
bw.newLine();
}
bw.close();
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
希望对您有所帮助!