字符串去重的方法

不保证原有顺序:

public static void main(String[] args) {
	String str = "abbddcaaaddfertsdf232122dsdfdsftwesdfdzxcssdfffggaasb";
	str = removedb ( str , 0 ) ;
	System.out.println ( "去重后:"+str );		
}	

public static String removedb(String word,int index){
         char[] words = word.toCharArray();
         if(index>=word.length()-1){					//判断当前index是否是字符串最后一位
             return word;						
         }
         String w = String.valueOf(words[index]);		//当前比较的字符转成字符串
         word=w.concat(word.replaceAll(w,""));			//将所有与比较字符w相同的内容去掉,再将比较字符w拼回去
         return removedb(word,index+1);				//递归调用,index+1比较下一个字符。
}

控制台输出:

去重后:gxzw132strefcdba

保证原有顺序,且统计出重复字符的重复数量:

public static void main(String[] args) {
	String str = "abbddcaaaddfertsdf232122dsdfdsftwesdfdzxcssdfffggaasb";
	str = String . valueof( removedb2 ( str.toCharArray(), 0 )) .replaceAll(" ","");
	System.out.println ("去重后:"+ str );		
}	

public static char[] removedb2(char[] word,int index){
        int num=0;
        if(index>=word.length-1){
            return word;
        }
        if(word[index]!=' '){
            for(int i=index;i<=word.length-1;i++){			//遍历字符数组
                if(word[i]==word[index]){					//比较当前遍历字符与判重字符是否相同				
                    num++;	
                    if(num>1){							//忽略第一位
                        word[i]=' ';							//将相同的字符赋值为' '空格串。
                    }
                }
            }
            if ( num>1 ) 
           	 System.out.println(word[index]+"的重复数量为:"+(num-1));
        }
        return removedb2(word,index+1);				//递归调用,index+1比较下一个字符。
    }

控制台输出:

a的重复数量为:5
b的重复数量为:2
d的重复数量为:10
c的重复数量为:1
f的重复数量为:7
e的重复数量为:1
t的重复数量为:1
s的重复数量为:6
2的重复数量为:3
g的重复数量为:1
    去重后:abdcferts231wzxg

改善方案,排除已替换为‘ ’空格串的数组下标,减少递归次数:

public static char[] removedb2(char[] word,int index){
        int num=0;
        if(index>=word.length-1){
            return word;
        }
        for(int i=index;i<=word.length-1;i++){
            if(word[i]==word[index]){
                num++;
                if(num>1){
                    word[i]=' ';
                }
            }
        }
        if(num>1)
            System.out.println(word[index]+"的重复数量为:"+(num-1));
        while(word[++index]==' '&&index<word.length-1){			//比较字符数组下一位下标的字符是否为‘ ’
        }
        return removedb2(word,index);
    }
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值