在网上看到一个笔试题:
假如有字符串“6sabcsssfsfs33” ,用最有快速的方法去掉字符“ab3”,不能用java内置字符串方法(indeOf,substring,replaceAll等)有人给出这样的解法:import java.util.Arrays;public class Test {
public static void main(String args[]) {
String str="6sabcsssfsfs33";
boolean[] removeChars = new boolean[256];
Arrays.fill(removeChars, false);
removeChars['a'] = true;
removeChars['b'] = true;
removeChars['3'] = true;
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (!removeChars[ch])
sb.append(ch);
}
String result = sb.toString();
System.out.println(result);
}
}
但我有2点看不明白
1. 为什么boolean数组的大小声明为256?
2. removeChars['a'] = true; 这是种什么用法啊,数组不是用下标的吗,比如removeChars[0] = true,怎么直接把字符放俩面了,看不明白,是解析成了ascii吗?removeChars['a']相当于removeChars[97]?
假如有字符串“6sabcsssfsfs33” ,用最有快速的方法去掉字符“ab3”,不能用java内置字符串方法(indeOf,substring,replaceAll等)有人给出这样的解法:import java.util.Arrays;public class Test {
public static void main(String args[]) {
String str="6sabcsssfsfs33";
boolean[] removeChars = new boolean[256];
Arrays.fill(removeChars, false);
removeChars['a'] = true;
removeChars['b'] = true;
removeChars['3'] = true;
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (!removeChars[ch])
sb.append(ch);
}
String result = sb.toString();
System.out.println(result);
}
}
但我有2点看不明白
1. 为什么boolean数组的大小声明为256?
2. removeChars['a'] = true; 这是种什么用法啊,数组不是用下标的吗,比如removeChars[0] = true,怎么直接把字符放俩面了,看不明白,是解析成了ascii吗?removeChars['a']相当于removeChars[97]?
boolean[] removeChars = new boolean[256]; bool 数组不适合用于创建位数组或位缓冲区
其实boolean设为128,也可以,因为这里他就是要大于Ascii码的总数就行,也就是大于128就行,因为这个字符串里的字符都是Ascii码可以包含的
2. removeChars['a'] = true; 这是种什么用法啊,数组不是用下标的吗,比如removeChars[0] = true,怎么直接把字符放俩面了,看不明白,是解析成了ascii吗?removeChars['a']相当于removeChars[97]?
是,Ascii码和数字是相通的,可以相互表示,
char ch = str.charAt(i);
if (!removeChars[ch])
sb.append(ch);
当ch=a时,removeChars[a]就相当于removeChars[97],也就是fasle,然后sb.append(a),就不执行
差不多就是这样
bf.deleteCharAt(2);
bf.deleteCharAt(3);
bf.deleteCharAt(12);
bf.deleteCharAt(13);
楼主中给出的方法是不对的,应为题目要求是删除"ab3"这个字符串,只有这三个字符在一块时才删除而不是将任意处的'a','b','3'删除,1.他定义成256是因为字符是一个字节最多也就256个,这样就可以包含所有的字符了,2.把字'a'转换成了int,这们他可以容易找到是数组中的哪一个元素,在java 字符本身就是以整型的形式存在的.