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);
    }
}

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

你可能感兴趣的:(Java编程题)