删除并统计数组中重复的字符

本文介绍了一种在字符数组中删除重复字符的有效方法,并提供了两种实现方式:一种通过直接操作字符数组来删除重复字符;另一种则借助字符串进行替换。文章还展示了如何在main方法中测试这些函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写一个方法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;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值