数据去重程序

来源:互联网 发布:linux ftp添加用户 编辑:程序博客网 时间:2024/04/29 00:46

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();                        }                                      }   }

 

0 0
原创粉丝点击