字符串中字符删除ac和b

  • 问题
    一个字符串,其中只有小写的字母,按条件删除
    1、当字符串中有ac挨着的情况下,把ac删除
    2、当字符串中有b 把b删除
    3、最好只遍历一次
  • Analyse
    想一想要从字符串里面删除字符,但是又要移动字符的话好麻烦,首先考虑到StringBuilder类,使用这个类就比较简单了

  • 源代码

public class Interview {

    public static void main(String[] args) {
        String string="abbbbcaabbccasdjlfkja";
        StringBuilder sb=new StringBuilder(string);

        int i=0;
        while(i<sb.length()){
            if(sb.charAt(i)=='b'){ //发现b
                sb.delete(i, i+1);  //删除
                if(i>=1)
                    i--;
            }
            else{
                if(i<sb.length()-1)
                    if(sb.charAt(i)=='a'&&sb.charAt(i+1)=='c'){  //发现ac
                        sb.delete(i, i+2);   //删除
                        if(i>=1)
                            i--;
                        continue;
                    }
                i++;
            }
        }
        System.out.println(sb.toString());
    }

}
  • 另一种方法——字符数组法
static void deal() {
        String str = "abbbbcaabbccasdjlfkja";
        char[] cs = str.toCharArray();
        char[] targetCs = new char[cs.length];
        int k = 0;
        for (int i = 0; i < cs.length; i++) {
            if (cs[i] != 'b') {                      //检测到b直接跳过
                if (cs[i] != 'c') {                  //非c则进入新数组
                    targetCs[k] = cs[i];
                    k++;
                } else {
                    if (k != 0 && targetCs[k - 1] == 'a') {//检测到是c,再检查上个进入新数组的是否为a,如果是,则指向退一,把a覆盖,同时检测边界
                        k--;
                    } else {                               //上一个进入的不是a,则c进入
                        targetCs[k] = cs[i];
                        k++;
                    }
                }
            }
        }
        String targetStr = new String(targetCs, 0, k);
        System.out.println(targetStr);
    }
  • 嗯,对滴,就这些了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值