Java机试编程题记录2

题目:
假如有字符串“6sabcsssfsfs33” ,用最有快速的方法去掉字符“ab3”,不能用java内置字符串方法(indeOf,substring,replaceAll等)?
思路:
不能用String的内置方法的话,那就用StringBuilder或者StringBuffer试试?StringBuilder没有加速,运行速率较快,另外StringBuilder有一个deleteCharAt(int index) 方法,删除指定位置上的char。不过要注意删除后字符串长度会改变,直接在遍历的时候删除的话会越界,应该先记录下来再删除,代码如下


import java.util.ArrayList;
import java.util.List;

/*
假如有字符串“6sabcsssfsfs33” ,用最有快速的方法去掉字符“ab3”,不能用java内置字符串方法(indeOf,substring,replaceAll等)?
 */
public class Test2 {

    public static String removeAB3(String str) {
        List<Integer> list = new ArrayList<>();
        StringBuilder stringBuilder = new StringBuilder(str);
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c == 'a' || c == 'b' || c == '3') {
                list.add(i);
                //不要在这里直接删除stringBuilder.deleteCharAt(i)
            }
        }
        for (int j = 0; j < list.size(); j++) {
            //删除一个索引就要减一,删除两个索引减二,刚好就是原本的索引值减去下标
            stringBuilder.deleteCharAt(list.get(j) - j);
        }
        return stringBuilder.toString();
    }

    public static void main(String[] args) {
        String str = "6sabcsssfsfs33";
        //值传递问题,这里还得改变str指向
        str = removeAB3(str);
        System.out.println(str);
    }
}

结果如下
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值