去除字符串的叠词:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程

由于StringBuffer定义字符串对象可以对字符串进行灵活操作,所以本人选用StringBuffer进行操作,String虽然也可以,但过于繁琐,总是要接收返回的字符串对象。而且请读者注意,题目要求去除叠词,而不是去除重复的字。
例如:我我….我…我.要…要要…要学….学学..学.编..编编.编.程.程.程..程
去除叠词结果:我要学编程
这是这个编程题的字符串,这个例题不具有普遍性,再来一个
例如:桥桥桥上上上吊吊上上上刀刀刀刀倒倒倒倒吊吊吊着着
去除叠词结果:桥上吊上刀倒吊着
而不是:桥上吊刀倒着
注意叠词这一点,就是让说话“结巴”的人说话正常而已,并不是不让他说重复的字,好了,明白了这一点就可以开始编程了

public static void main(String[] args) {
        StringBuffer s2=new StringBuffer("我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程");//初始化字符串,你也可以用控制台输入字符串

        char c=s2.charAt(0);//取出字符串第0个位置的字符,取出叠词的第一个字
        for(int i=1;i<s2.length();) {//遍历字符串,从第1个位置开始(第一个叠词的下一个位置)
            if(c==s2.charAt(i)||s2.charAt(i)=='.') {//如果是叠词或者是‘.’
                s2.deleteCharAt(i);//清除掉第i位置的字符串,后面的字符串会自动向前补,所以不用i++
            }
            else {
                c=s2.charAt(i);//这个字不是叠词,叠词已经清除,并只剩下第一个字,c移向下一个叠词,也就是当前的字
                i++;//i从当前c(叠词)字符的下一个字符开始判断
            }
        }
        System.out.println(s2);//输出最后无叠词的s2
    }

运行结果
这里写图片描述
如果是要去除重复的字符需要改成双重for循环,改动如下

for(int j=0;j<s2.length()-1;j++){
        c=s2.charAt(j);//从前往后把每个字符取出来,从下一个判断是否重复
        for(int i=j+1;i<s2.length();) {//遍历剩余字符串,从第j+1个位置开始往后遍历
            if(c==s2.charAt(i)) {//如果为重复的字符做如下操作
                s2.deleteCharAt(i);//清除掉第i位置的字符串,后面的字符串会自动向前补,所以不用i++
            }
            else {
                i++;//如果不是重复的字符,跳过当前字符判断下一个
            }
        }
}

猜你喜欢

转载自blog.csdn.net/L_Mcode/article/details/82025065