题目:
假如有字符串“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);
}
}
结果如下