本帖最后由 水月灬清影 于 2016-8-14 11:21 编辑  
 
[Java] 纯文本查看 复制代码  public static void main(String[] args) {
         String s = "wo111ai222heima";
         String regex = "\\d";
         String ss = s.replaceAll(regex, "");
         System.out.println(ss);
         char[] c = ss.toCharArray(); 
         int[] arr = new int[99];               
         char[] c1 = new char[99];               
         int i = 0;
         int x=0;     //你代码我没改,只加入这么一个参数,用于记录各个字母一共重复几次,也就是c1数组的长度相比数组c要减少多少,是用来控制“索引指针”在当前位置停留的,任意字母重复1次,那么c1数组“索引指针”就相对于原数组“索引指针”i 前移 1,重复两次,相对于i 前移 2,重复x次,前移x。之所以你的代码会出问题,是因为c1数组如果没有插入新字符,那么就没有对当前索引处的值做任何修改,而索引直接跟着你的外层循环指向下一个位置了。不知道这样说可否明白?
         a:for (i=0; i < c.length; i++) {        
                 for (int j = 0; j < i; j++) {
                         if (c1[j] == c[i]) {              
                                          arr[j]++; 
                                          x++;        //只要重复,x就自加                                                                                                
                                 continue a;                              
                         }
                 }
                 c1[i-x] = c[i];                              //索引相应减少          
                 arr[i-x]++;
         }
         for (int j = 0; j < i-x; j++) {       //c1长度变为i-x
                 System.out.println(c1[j] + "个数是:" + arr[j]);
         }
 } |