数据去重程序

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值