1 . 想要去去重的数据的格式:
field1 field2
第一行 A B
第二行 A B
第三行 B A
像第一行和第二行算重复,并且第一行和第三行也算重复,需要去重,将第二行和第三行删掉,留下第一行数据。
输入数据为excel文档格式,要去重的两个列是drug_name_id和inter_drug_name_id
2 . 处理思路
(1)先将excel中的内容复制的txt文本中,并且把第一行删除掉(避免处理中的麻烦)
(2)首先用subString截取到第一行中的drug_name_id(用a代表)和inter_drug_name_id(用b代表)的数据。将字符 串a和b拼接成ab,并且将之存到set集合(不可以放重复数据)中,然后逐行循环每一行,每行都要做这样的处 理:将b和a拼接成ba,看set集合是否包含ba,如果包含ba,则不需要输出这行数据,如果不包含ba,然后 做如下判断,将a和b拼接成ab,看set集合中是否包含ab,如果不包含ab,则将ab放到集合中,并且将这行数据输 出到文本,直到所有行处理完毕。
3 . 具体java代码:
package QuChong;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
public class QuChong {
public BufferedReader createBr(String pathname){
try{
//防止文件建立或读取失败,用catch捕获错误并打印
//读取txt文件
//这是绝对路径
File file1 = new File(pathname); //要读取以上路径的txt文件
//建立一个输入流对象
InputStreamReader reader = new InputStreamReader(new FileInputStream(file1),"GBK");
//建立一个对象,它将文件内容转成计算机能读懂的语言
BufferedReader br = new BufferedReader(reader);
return br;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
public BufferedWriter createBw(String pathname){
try{
//写入txt文件,如果是写入的内容是string类型的字符串,则用这个方法
File file = new File(pathname);
//如果文本文件不存在则创建它
if(file.exists() == false){
file.createNewFile();
//重新实例化
file = new File(pathname);
}
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
return bw;
}catch(Exception e){
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
try{
String pathname = "D:\\work\\zpy\\drug_inter去重过程\\drug_inter.txt";
String pathname1 ="D:\\work\\zpy\\drug_inter去重过程\\result1.txt";
BufferedReader br = new QuChong().createBr(pathname);
BufferedWriter bw = new QuChong().createBw(pathname1);
String line = "";
line = br.readLine();
//System.out.println(line);
bw.write(line+"\r\n");
//获取drug_name_id和inter_drug_name_id
String drug_name_id = line.substring(line.indexOf("DB"),line.indexOf("DB")+7);
String inter_drug_name_id = line.substring(line.lastIndexOf("DB"),line.lastIndexOf("DB")+7);
//set集合不可以放重复数据
Set set = new HashSet();
//将第一条数据放入set集合中
set.add(drug_name_id+inter_drug_name_id);
//System.out.println(set);
line = br.readLine(); //一次读取一行数据
System.out.println(line);
while(line != null){
String drug_name_id1 = line.substring(line.indexOf("DB"),line.indexOf("DB")+7);
String inter_drug_name_id1 = line.substring(line.lastIndexOf("DB"),line.lastIndexOf("DB")+7);
//两个字段交叉相等的情况
boolean b1 = set.contains(inter_drug_name_id1+drug_name_id1);
//两个字段对应相等的情况
boolean b2 = set.contains(drug_name_id1+inter_drug_name_id1);
if(b1 == true){
//这条数据与上一条重复,不需要将其输出。
}else{
if(b2 == true){
//这条数据与上一条重复,不需要将其输出。
}else{
//这条数据与上一条不重复,需要将其输出到文本中
set.add(drug_name_id1+inter_drug_name_id1);
//System.out.println(set);
bw.write(line + "\r\n");
}
}
line = br.readLine(); //一次读取一行数据
}
System.out.println("size " + set.size());
// 把缓存区内容压入文件
bw.flush();
// 最后记得关闭文件
bw.close();
br.close();
}catch(Exception e){
e.printStackTrace();
}
}
}