如何把字符串 String str="01,01,02,03,03,10";
处理为:
            String StrTwo ="0102,2001,0302,1001";  (4位中前两位标识字符串,后两位表示重复次数。如0102表示有02个01)

解决方案 »

  1.   


    Map<String,Integer> map=new HashMap<String,Integer>();
    String str="01,01,02,03,03,10";
    String[] ss=str.split(",");
    for(String s:ss){
    Integer count=map.get(s);
    if(count==null){
    map.put(s, 1);
    }else{
    map.put(s, count+1);
    }
    }
    String result="";
    for(Entry<String,Integer> e:map.entrySet()){
    if(!"".equals(result)){
    result+=",";
    }
    result+=(e.getKey()+(e.getValue()<10?("0"+e.getValue()):e.getValue()));
    }
    System.out.println(result);
      

  2.   

    package a;import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;public class Test5 { /**
     * @param args
     * @author sunstar
     * @date 2012-7-18 下午5:29:53
     */
    public static void main(String[] args) {
    String str ="01,01,02,03,03,10"; Map<String, Integer> map = new HashMap<String, Integer>() ;
    String arrs[] = str.split(",") ;
    String tmp = "" ;
    int num = 0 ;
    for (int i = 0; i < arrs.length; i++){
    tmp = arrs[i] ;
    if (map.get(tmp) != null){
    num = map.get(tmp)+ 1 ;
    }else
    num = 1 ;
    map.remove(tmp) ;
    map.put(tmp, num) ;


    }

    Iterator it = map.keySet().iterator() ;
    StringBuffer sb = new StringBuffer() ;
    while(it.hasNext()){
    tmp = (String) it.next() ;
    sb.append(intToFormatStr(map.get(tmp), 2) +tmp ) ;
    sb.append(",") ;
    System.out.println(tmp + " --" + map.get(tmp)+"次") ;
    }
    System.out.println(sb.toString().substring(0,sb.toString().length()-1)) ; }
    public static String intToFormatStr(int value, int len){
    String str = value +"";
    while(str.length() < len){
    str = "0" + str ;
    }
    return str ;
    }}10 --1次
    01 --2次
    02 --1次
    03 --2次
    0110,0201,0102,0203