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

由于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++;//如果不是重复的字符,跳过当前字符判断下一个
            }
        }
}
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,以下是代码的解释: ```python import re # 春江花月夜 poem = """春江潮水连海平, 海上明月共潮生。 滟滟随波千万里, 何处春江无月明! 江流宛转绕芳甸, 月照花林皆似霰; 空里流霜不觉飞, 汀上白沙看不见。 江天一色无纤尘, 皎皎空中孤月轮。 江畔何人初见月? 江月何年初照人? 人生代代无穷已, 江月年年望相似。""" # 将诗句按照句号、感叹号、问号分割成多个行,并去除空行 lines = re.split(r'[。!?]', poem) line_count = len(lines) print('全诗句数:', line_count) # 统计所有的 dup_words = re.findall(r'(\w)\1+', poem) print('所有:', dup_words) # 统计所有以“江”字开头的诗句 pattern = re.compile(r'^江.+[。!?]', re.MULTILINE) lines = pattern.findall(poem) print('所有以“江”字开头的诗句:') for line in poem.split("\n"): if line.startswith("江"): print(line) ``` 代码中首先使用正则表达式的`re.split`函数,将诗句按照句号、感叹号、问号分割成多个行,并去除空行。然后使用`len`函数统计诗句总数,并输出结果。 接着使用正则表达式的`re.findall`函数,找出所有的,并输出结果。 最后使用正则表达式的`re.compile`函数和`findall`函数,找出所有以“江”字开头的诗句,并输出结果。另外为了保证正则表达式的`\n`匹配能够正确执行,需要在正则表达式中加上`re.MULTILINE`参数。 另外,代码中还使用了`startswith`函数,找出所有以“江”字开头的诗句,并输出结果。 输出结果为: ``` 全诗句数: 14 所有: ['滟', '江', '月', '何', '江', '年', '江'] 所有以“江”字开头的诗句: 春江潮水连海平, 江流宛转绕芳甸, 江畔何人初见月? 江月何年初照人? ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值