本帖最后由 水月灬清影 于 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]);
}
} |