写一个方法deleteRepeats()用来统计并删除字符数组中某段重复的字符。这个函数有两个参数
第一个参数是数组,第二个参数是指定的范围。如下所示
执行前:
char a[10];
a[0] = 'a';
a[1] = 'b';
a[2] = 'a';
a[3] = 'c';
int size = 4; //size代表数组中已经被填充的范围
size = deleteRepeats(a, size);
当这个函数执行后,
a[0] 的值为 'a';
a[1] 的值为'b';
a[2] 的值为'c';
size等于3,被删除的a[3]不用去关注了。
要求该方法返回重复的字符个数。
假设该数组中的字符都是小写字母。
在main方法中测试该函数。
//实在是妙不可言,都怀疑自己的智商了。呵呵,要是老有那么聪明,那就一切都好办了!
package ch03;
public class DeleteCharArrRepeats {
public static void main(String[] args) {
char[] charArr=new char[10];
charArr[0]='a';
charArr[1]='b';
charArr[2]='c';
charArr[3]='a';
charArr[4]='a';
charArr[5]='z';
int size=6;
System.out.println("原字符数组的实际长度:"+size);
System.out.println(charArr);
System.out.println("-----------------------------");
System.out.println("重复字符的个数为:"+deleteRepeats1(charArr,size));
System.out.println(charArr);
}
/**
* 第1种删除字符数组内重复字符的方法, 有点像排序, 很小很强大
*/
public static int deleteRepeats1(char[] charArr,int size) {
int repeatCount=0;
for(int i=0;i
for(int j=i+1;j
if(charArr[j]==0){
break;
}
if(charArr[j]==charArr[i]){ //1.abc0az
charArr[j]=0; //2.abc00z
repeatCount++; //3.abc0z0
} //4.abcz00
if(charArr[j-1]==0){
charArr[j-1]=charArr[j];
charArr[j]=0;
}
}
}
return repeatCount;
}
/**
* 第2种删除字符数组内重复字符的方法, 以字符串作媒介,替换其中的重复字符为空,再回传
*/
public static int deleteRepeats2(char[] charArr,int size) {
String str=new String(charArr);
for(int i=0;i
String frontStr=str.substring(0,i+1);
String backStr=str.substring(i+1);
String seekChar=str.substring(i,i+1);
backStr=backStr.replace(seekChar, "");
str=frontStr+backStr;
}
//此处无法直接赋值, 折腾我一晚上
char[] tempArr=str.toCharArray();
for(int i=0;i
charArr[i]=i
}
return str.length()-1;
}
}