这样一个字符串String str2 = "0,1,4,10,12,13,0,1,7,8,0,1,7,9"
我想删除重复的字符串,但是排序不变,最后生成这样的字符串
String ret = "1,4,10,12,13,7,8,9"我用了HashSet的add方法,重复的删除了,可是改变了字符串的排序。

解决方案 »

  1.   

    那你就用LinkedHashSet吧,这个就有顺序了。
      

  2.   

    import java.util.*;
    public class TestString {
       private static String removeString(String str)
        {
            Set<String> mLinkedSet = new LinkedHashSet<String>();
            String[] strArray = str.split(",");
            StringBuffer sb = new StringBuffer();         for (int i = 0; i < strArray.length; i++)
            {
                if (!mLinkedSet.contains(strArray[i]))
                {
                    mLinkedSet.add(strArray[i]);
                    sb.append(strArray[i] + ",");
                }
            }
          System.out.println(mLinkedSet);
            return sb.toString().substring(0, sb.toString().length() - 1);
        }
      public static void main(String[] args) {
      String aaa=removeString("0,1,4,10,12,13,0,1,7,8,0,1,7,9");
      System.out.println(aaa);
    }
      

  3.   


    String str2 = "0,1,4,10,12,13,0,1,7,8,0,1,7,9";
    String num[] = new String[10];
    String ret = "";
    num = str2.split("\\,",0);
    List<String> list = new ArrayList<String>();
    for(String s : num) {
      Boolean bool = true;
      for(String l : list) {
        if(l.equals(s)) {
          bool = false;
          break;
        }
      }
      if(bool) {
        list.add(s);
      }
    }
    for(String s : list) {
      ret = ret + "," + s;
    }
    ret = ret.substring(1, ret.length());
    System.out.println(ret);
      

  4.   

    楼主可以考虑用map当对应的key的value存在时,不进行压入,这样得到的顺序和之前的也是一样的,public static void do1(){
    String str="1,2,3,4,5,6,7,8,9,4,5,8,5,6,6,6,1";
    Map m=new Hashtable();
    String[] a=str.split(",");
    if(a!=null){
    for(int i=0;i<a.length;i++){
    if(m.get(a[i])!=null){
    int s=-1;
    try{s=Integer.parseInt(m.get(a[i])+"");}catch(Exception e){}
    m.put(a[i], s+1);
    }
    else{
    m.put(a[i], 1);
    }
    }
    }
    for(int i=0;i<m.size();i++){
    System.out.println(a[i]+"##"+m.get(a[i]));
    }
    }
      

  5.   

    StringBuffer sb = new StringBuffer("0,1,4,10,12,13,0,1,7,8,0,1,7,9");
    String[] strArray = sb.toString().split(","); 
    for (int i=0; i<strArray.length; i++) {
        int lastIndex = sb.lastIndexOf(strArray[i]);
        while (sb.indexOf(strArray[i]) != lastIndex && sb.charAt(lastIndex-1) ==',' && sb.charAt(lastIndex + strArray[i].length()) ==',') {
            sb.delete(lastIndex-1, lastIndex + strArray[i].length());
            lastIndex = sb.lastIndexOf(strArray[i]);
        }
    }
    System.out.println(sb);
      

  6.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【10yue】截止到2008-07-08 12:00:20的历史汇总数据(不包括此帖):
    发帖的总数量:9                        发帖的总分数:330                      每贴平均分数:36                       
    回帖的总数量:16                       得分贴总数量:6                        回帖的得分率:37%                      
    结贴的总数量:9                        结贴的总分数:330                      
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  7.   


                    String str = "0,1,4,10,12,13,0,1,7,8,0,1,7,9";
    LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
    for(String str1 : str.split(",")) map.put(str1, str1);
    for(String str2 : map.values()) System.out.println(str2);
                    
                    
      

  8.   


       String str = "0,1,4,10,12,13,0,1,7,8,0,1,7,9";
       String _s1 = ","+str;
       String _s2 = _s1.replaceAll(",0","");
       return _s2.substring(1,_s2.length); 
      

  9.   


    String str = "0,1,4,10,12,13,0,1,7,8,0,1,7,9";
    StringBuilder sb = new StringBuilder(",");
    for(String str1 : str.split(",")) {
    String pattern = ","+str1+",";
    if(sb.indexOf(pattern)==-1) sb.append(str1).append(",");
    }
    System.out.println(sb.toString());
      

  10.   

    感觉还是用LinkedHashSet方便一些,不过我没有用过
      

  11.   


    import java.util.LinkedHashMap;
    class Test{
    public static void main(String[] args) {
            String str = "0,1,4,10,12,13,0,1,7,8,0,1,7,9";
            StringBuffer sb = new StringBuffer();
            LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
            for(String tempStr : str.split(",")) 
             map.put(tempStr, tempStr);
            for(String tempStr : map.values()) 
             sb.append(tempStr+",");
            System.out.println(sb.substring(0,sb.length()-1));
    }
    }
      

  12.   


    不明白哦,HashSet 怎么可能会把重复的给删除了呢?Set 是会保留一个的啊,不会删的啊。我感觉你生成的 ret 有些莫名其妙str = "0,1,4,10,12,13,0,1,7,8,0,1,7,9"
    ret = "1,4,10,12,13,7,8,9"我不是很明白 0 为什么没有了?
      

  13.   


    第一,我是没有看明白lz要做什么。是把重复的元素全部删除?(例如0,有重复的那么0这个元素就不出现在字符串中。)还是把重复的删除呢?(例如,0,有重复的那么我把后来出现的0删除掉,字符串中会保留一个0)如果是前者 只能一个元素一个元素的遍历了
    如果是后者 用linkedhashset 或者map什么的就可以解决了
      

  14.   

    不好意识,是我没有说明白,应该0也在其中的,最后生成出来的是这样的String ret = "0,1,4,10,12,13,7,8,9"
      

  15.   

    把我给你写的第二段代码中的StringBuilder改成StringBuffer应该可以