解决方案 »

  1.   

    单纯全删掉:
     
    delete from 你的表名 where  CtfTp  in (select CtfTp  from 你的表名 group by CtfTp  having count(*)>1)
    left join 
      

  2.   

    轻忽视第二行的left join,手误
      

  3.   

    回2楼,要用java实现,不要用sql谢谢
      

  4.   

    你的文件是txt文件还是指数据库读取出来的数据文件,如果是数据库里面读出来的要是要用sql语句吧。如果是从txt或者其他文件读出来的数据,可以先定义一个实体类Data对应你的数据:Name,CardNo,Descriot,CtfTp,CtfId,Gender,Birthday,Address,
    然后根据 CtfTp 删除ArrayList<Data> 中重复的元素
      

  5.   

    以下是伪代码,说个意思不保证编译通过//假设你的数据都是存在rowList里面的
    List<Map<String, String>> rowList = new List<Map<String,String>>();// 这个List放处理后不重复的数据
    List<Map<String, String>> distinctRowList = new List<Map<String,String>>();// 当然你用do while的方式来做也行
    String CtfTp = rowList.get(0).get("CtfTp");
    distinctRowList.add(rowList.get(0));
    for (int i = 1; i < rowList.size(); i++) {
    HashMap<String, String> currentRow = rowList.get(i);
    if (!CtfTp.equals(currentRow.get("CtfTp"))) {
    distinctRowList.add(currentRow);
    }
    CtfTp = currentRow.get("CtfTp");
    }
      

  6.   

    还有个前提,你的数据已经按照CtfTp字段排过序了
      

  7.   

    这个是不用排序的List<Map<String, String>> rowList = new List<Map<String,String>>();
    List<Map<String, String>> distinctRowList = new List<Map<String,String>>();Map<String, Map<String, String>> keyRowList = new Map<String, Map<String,String>>();
    for (Iterator iterator = rowList.iterator(); iterator.hasNext();) {
    Map<String, String> currentRow = (Map<String, String>) iterator.next();
      try{keyRowList.put(currentRow.get("CtfTp"), currentRow);}catch(Exception e){}
    }for (Map<String, String> map : keyRowList.values()) {
    distinctRowList.add(map);
    }
      

  8.   

    回复BrightFireOfCy:
    我的要求是获得CtfTp的下标然后在去判断CtfTp的字段内容是否有重复,有就删除保留第一条:比如  
                   String strArray[] = fr.toString().split(",");
             outkey = strArray[3];
                    //开始获得下标是CtfTp,然后判断CtfTp 的内容是否有重复,如果有删除这条记录(只保留第一条),
                 
      

  9.   

    Map<String,Object>recordMap = new HashMap<String,Object>();
    //循环按行读取文件
    ...
    String strArray[] = fr.toString().split(",");
    String key = strArray[3];
    if(recordMap.get(key)==null){
        recordMap.put(key,strArray);
    }
    else{
       continue;  //继续读取下一行
    }//读完文件结束循环
    //recordMap里放的就是你想要的
      

  10.   

    回复BrightFireOfCy
    文件数据格式:
    Name,CardNo,Descriot,CtfTp,CtfId,Gender,Birthday,Address
    彬,,,ID,xxxxx21059,M,20101001,,,F,,CHN,,,,,,,,139,19:46:02,4000000
    珊,,,ID,xxxxx811090189,M,20101001,,,F,,CHN,,,,,,,,158
    世,,,ID,4xxxxx1772,M,19880129,,,F,,CHN,,,,,,,,152108,2,1,,,,,0,2010-10-19 
    超,,,ID,4xxxxx1772,M,20101001,,,F,,CHN,,,,,,,,1585091,,,mc06o.cn,,,,,,,,0,2010-10-19 19:46:04,4000003
    磊,,,ID,4xxxxx1772,M,19831011,,,F,,CHN,,,,,,,,159159,362,,565408,,,,,,,,0,2010-10-19 19:46:05,4000004
    芳,,,ID,xxxxx811090189,M,20101001,,,F,,CHN,,,,,,,,1506:05,4005
    要求:读取文件后,我要根据CtfTp 字段删除对应的字段内容,删除掉重复的,只保留第一条。
    删除后的数据格式是:
    彬,,,ID,xxxxx21059,M,20101001,,,F,,CHN,,,,,,,,139,19:46:02,4000000
    珊,,,ID,xxxxx811090189,M,20101001,,,F,,CHN,,,,,,,,158
    世,,,ID,4xxxxx1772,M,19880129,,,F,,CHN,,,,,,,,152108,2,1,,,,,0,2010-10-19
      

  11.   

    //将map转为list
    List list = new ArrayList(recordMap.values());
      

  12.   

    在下发的两段代码都能做到阿,前提是你把文件读到定义好的List里
    lz不会连读文件的代码都要在下码一遍吧
    在下能上网的机器里面没有开发环境阿,
    上面的代码都是手打的啊,lz体谅一下在下行不?
      

  13.   

    读写csv文件请参照下面的连接
    http://blog.csdn.net/madai/article/details/5014186
      

  14.   

    在下发的两段代码都能做到阿,前提是你把文件读到定义好的List里
    lz不会连读文件的代码都要在下码一遍吧
    在下能上网的机器里面没有开发环境阿,
    上面的代码都是手打的啊,lz体谅一下在下行不?public class ReadText { public static void main(String[] args) throws Exception { dumplicateData("F:/allubuntu/data/xw.txt",
    "F:/allubuntu/data/dumplicateName.txt");
     
    } /**
     * @param fileName 文件名
     * @param dumplicateName  去重复后的文件名
     * @throws IOException
     */
    public static void dumplicateData(String fileName, String dumplicateName)
    throws IOException { FileReader fr = new FileReader(fileName);
    FileWriter fw = new FileWriter(dumplicateName);

    Map<String, Object> recordMap = new HashMap<String, Object>();
    char[] chs = new char[1024];
    int len = 0;
    String outkey = "";
    if (fr != null) {
    //读取文件
    if (fr.toString().indexOf("Name") >= 0) {
    while ((len = fr.read(chs)) != -1) {

    String strArray[] = fr.toString().split(",");
    outkey = strArray[3];
    if (recordMap.get(outkey) == null) {
    recordMap.put(outkey, strArray);
    } else {
    continue; 
    }
    fw.write(chs, 0, len);
    fw.flush();
    }
    }
    // 释放资源
    fw.close();
    fr.close();
    } }
    }
    怎么将读取的文件放在你说的集合。我现在读取文件后写不到目标文件。
      

  15.   

    发现用Excel写代码也不错,至少对的起import java.io.*;
    import java.util.*;public class TestMain { public static void main(String[] args) {

    ArrayList<HashMap<String, String>> rowList = readCsv("c:\\csv.csv");
    ArrayList<HashMap<String, String>> distinctRowList = new ArrayList<HashMap<String,String>>(); HashMap<String, HashMap<String, String>> keyRowList = new HashMap<String, HashMap<String,String>>();
    for (Iterator<HashMap<String, String>> iterator = rowList.iterator(); iterator.hasNext();) {
    HashMap<String, String> currentRow =  iterator.next();
    try{
    keyRowList.put(currentRow.get("CtfTp"), currentRow);
    }catch(Exception e){
    }
    }

    for (HashMap<String, String> hashMap : keyRowList.values()) {
    distinctRowList.add(hashMap);
    }

    writeCsv(distinctRowList, "c:\\csv.csv");
    }

    private static ArrayList<HashMap<String, String>> readCsv(String fileName) {
    ArrayList<HashMap<String, String>> retList = new ArrayList<HashMap<String,String>>();
    String[] keys = new String[8];
    File csv = null;
    BufferedReader br = null;
    try { 
                csv = new File(fileName);            br = new BufferedReader(new FileReader(csv));             String line = "";
                int lineIndex = 0;
    while ((line = br.readLine()) != null) {
    String[] cells = line.split(",");
    if (lineIndex > 0) {
    HashMap<String, String> row = new HashMap<String, String>();
    for (int i = 0; i < keys.length; i++) {
    row.put(keys[i], cells[i]);
    }
    retList.add(row);
    } else {
    for (int i = 0; i < keys.length; i++) {
    keys[i]=cells[i];
    }
    }
    lineIndex++;
                } 
            } catch (Exception e) { 
                e.printStackTrace(); 
            } finally {
             if (br!=null) {
    try {
    br.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
            }
    return retList;
    }

    private static void writeCsv(ArrayList<HashMap<String, String>> data, String fileName){
    File csv = null;
    BufferedWriter bw = null;
    try { 
                csv = new File(fileName);
                if (csv.exists()) {
    csv.delete();
    }
    bw = new BufferedWriter(new FileWriter(csv, false));
    bw.newLine();
    bw.write("Name,CardNo,Descriot,CtfTp,CtfId,Gender,Birthday,Address");
    for (Iterator<HashMap<String, String>> iterator = data.iterator(); iterator
    .hasNext();) {
    HashMap<String, String> currentRow = iterator.next();
    bw.newLine();
    bw.write(String.format("%s,%s,%s,%s,%s,%s,%s,%s",
    currentRow.get("Name"), currentRow.get("CardNo"),
    currentRow.get("Descriot"), currentRow.get("CtfTp"),
    currentRow.get("CtfId"), currentRow.get("Gender"),
    currentRow.get("Birthday"), currentRow.get("Address")));
    }
            } catch (Exception e) { 
                e.printStackTrace(); 
            } finally {
             if(bw !=null){
             try {
    bw.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
             }
            }
    }
    }
      

  16.   

    在下发的两段代码都能做到阿,前提是你把文件读到定义好的List里
    lz不会连读文件的代码都要在下码一遍吧
    在下能上网的机器里面没有开发环境阿,
    上面的代码都是手打的啊,lz体谅一下在下行不?public class ReadText { public static void main(String[] args) throws Exception { dumplicateData("F:/allubuntu/data/xw.txt",
    "F:/allubuntu/data/dumplicateName.txt");
     
    } /**
     * @param fileName 文件名
     * @param dumplicateName  去重复后的文件名
     * @throws IOException
     */
    public static void dumplicateData(String fileName, String dumplicateName)
    throws IOException { FileReader fr = new FileReader(fileName);
    FileWriter fw = new FileWriter(dumplicateName);

    Map<String, Object> recordMap = new HashMap<String, Object>();
    char[] chs = new char[1024];
    int len = 0;
    String outkey = "";
    if (fr != null) {
    //读取文件
    if (fr.toString().indexOf("Name") >= 0) {
    while ((len = fr.read(chs)) != -1) {

    String strArray[] = fr.toString().split(",");
    outkey = strArray[3];
    if (recordMap.get(outkey) == null) {
    recordMap.put(outkey, strArray);
    } else {
    continue; 
    }
    fw.write(chs, 0, len);
    fw.flush();
    }
    }
    // 释放资源
    fw.close();
    fr.close();
    } }
    }
    怎么将读取的文件放在你说的集合。我现在读取文件后写不到目标文件。
    哎,我怎么看到ubuntu了, 你不linux嘛, 用shell搞不是更简单? 白让我码这么多代码