写一串代码,把一个文件(每行一个成语信息,包括成语 拼音 释义等)中只要是重复的成语就把整个信息(同一成语可能有两种解释,只保留一个)删去,整理后输出到一个新的文件 用java代码
时间: 2024-03-10 11:48:42 浏览: 140
下面是一个实现将一个文件中重复的成语信息(只保留一种解释)删除的Java代码示例:
```java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class RemoveDuplicateChengYu {
// 定义一个ChengYu类,包含成语、拼音和释义三个属性
static class ChengYu {
String pinYin;
String shiYi;
public ChengYu(String pinYin, String shiYi) {
this.pinYin = pinYin;
this.shiYi = shiYi;
}
// 重写equals和hashCode方法,用于Map去重
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
ChengYu chengYuObj = (ChengYu) obj;
return pinYin.equals(chengYuObj.pinYin) && shiYi.equals(chengYuObj.shiYi);
}
@Override
public int hashCode() {
int result = pinYin.hashCode();
result = 31 * result + shiYi.hashCode();
return result;
}
}
public static void main(String[] args) {
String inputFile = "input.txt"; // 输入文件名
String outputFile = "output.txt"; // 输出文件名
Map<String, ChengYu> chengYuMap = new HashMap<>(); // 用Map存储不重复的成语信息(只保留一种解释)
try (BufferedReader reader = new BufferedReader(new FileReader(inputFile));
BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile))) {
String line;
while ((line = reader.readLine()) != null) {
String[] fields = line.split("\t"); // 假设成语信息是用制表符分隔的
if (fields.length >= 3) { // 至少要有成语、拼音和释义三个字段
String chengYu = fields[0];
ChengYu newChengYu = new ChengYu(fields[1], fields[2]);
ChengYu oldChengYu = chengYuMap.put(chengYu, newChengYu);
if (oldChengYu != null && !oldChengYu.equals(newChengYu)) { // 如果Map中已经有该成语信息,且解释不同,则删除该信息
chengYuMap.remove(chengYu);
}
}
}
for (Map.Entry<String, ChengYu> entry : chengYuMap.entrySet()) { // 将Map中的成语信息写入输出文件
writer.write(entry.getKey() + "\t" + entry.getValue().pinYin + "\t" + entry.getValue().shiYi);
writer.newLine();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
该代码将输入文件中的每行成语信息解析成ChengYu对象,并将其存储在一个Map中,其中Map的键为成语,值为ChengYu对象。如果Map中已经有该成语信息,且解释不同,则删除该信息。最后将Map中的成语信息写入输出文件。注意,由于Map中只保留了一种解释,因此输出文件中的成语信息可能比输入文件中的信息少。
阅读全文