删除字符串的问题

luqing414 2010-04-19 06:28:01
在网上看到一个笔试题:
假如有字符串“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]?
...全文
131 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hua_nan_she 2010-04-19
  • 打赏
  • 举报
回复
很不错哈,学习!
xiao_kan_hong_chen 2010-04-19
  • 打赏
  • 举报
回复
楼上的,谁说不能指明大小了
楼主中给出的方法是不对的,应为题目要求是删除"ab3"这个字符串,只有这三个字符在一块时才删除而不是将任意处的'a','b','3'删除,1.他定义成256是因为字符是一个字节最多也就256个,这样就可以包含所有的字符了,2.把字'a'转换成了int,这们他可以容易找到是数组中的哪一个元素,在java 字符本身就是以整型的形式存在的.
yadarling 2010-04-19
  • 打赏
  • 举报
回复
String str="6sabcsssfsfs33";

StringBuffer bf=new StringBuffer(str);
bf.deleteCharAt(2);
bf.deleteCharAt(3);
bf.deleteCharAt(12);
bf.deleteCharAt(13);
zhuyouyong 2010-04-19
  • 打赏
  • 举报
回复
顶[Quote=引用 2 楼 zfq642773391 的回复:]
1. 为什么boolean数组的大小声明为256?
其实boolean设为128,也可以,因为这里他就是要大于Ascii码的总数就行,也就是大于128就行,因为这个字符串里的字符都是Ascii码可以包含的
2. removeChars['a'] = true; 这是种什么用法啊,数组不是用下标的吗,比如removeChars[0] = true,怎么直接把字符放俩面了,看不明白,是解析成了as……
[/Quote]
zfq642773391 2010-04-19
  • 打赏
  • 举报
回复
1. 为什么boolean数组的大小声明为256?
其实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),就不执行
差不多就是这样
hlw881008 2010-04-19
  • 打赏
  • 举报
回复
java的数组声明和c语言不一样,不能在声明处指明大小
boolean[] removeChars = new boolean[256]; 


bool 数组不适合用于创建位数组或位缓冲区

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧