54-StringBuilder类的使用
StringBuilder可以提高效率。String其实是不能修改的,每次改变其实是重新创建了一个对象,这样如果多次修改的话,相当于java虚拟机帮我们创建了多个String的内存空间。下面来测试一下String和StringBuilder之间消耗的时间。
long sTime = System.currentTimeMillis();
String s = "";
for (int i = 0; i < 10000; i++) {
s += i;
}
long eTime = System.currentTimeMillis();
System.out.println("消耗的时间是:" + (eTime - sTime));
long sTime1 = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
sb.append(i);
}
long eTime1 = System.currentTimeMillis();
System.out.println("消耗的时间是:" + (eTime1 - sTime1));Code language: JavaScript (javascript)
输出结果示例:
消耗的时间是:1191
消耗的时间是:26
55-StringBuilder的常用方法
append方法:追加方法insert方法:插入方法delete方法:删除方法toString方法:转换为String
StringBuilder sb = new StringBuilder();
sb.append("追加"); //追加
sb.insert(0, "插入到0"); //插入到0追加
sb.insert(1, "插入到1"); //插插入到1入到0追加
sb.append("追加"); //插插入到1入到0追加追加
sb.delete(3, 6); //插插入0追加追加
String s = sb.toString();
System.out.println(s); //插插入0追加追加Code language: JavaScript (javascript)
56-练习-去掉重复字符
去掉一段话中的重复汉字。比如:
“人生中有许多的不如意,各人有各人的烦恼,各家有各家的难处。所以,我们在不如意时往往会怨天尤人,道不出的烦,讲不完的恼,只愿自己命不好,总觉自己活得不如别人,看什么都不顺眼,新的怨旧的恨一古脑地涌上心头,展在眼前,于是生出许多感慨:人情薄如纸。”
方法一:使用两个StringBuilder
把不重复的字符遇到新的字符加进去,每次增加前遍历检查是否存在。
public static void main(String[] args) {
String s = "人生中有许多的不如意,各人有各人的烦恼,各家有各家的难处。所以,我们在不如意时往往会怨天尤人,道不出的烦,讲不完的恼,只愿自己命不好,总觉自己活得不如别人,看什么都不顺眼,新的怨旧的恨一古脑地涌上心头,展在眼前,于是生出许多感慨:人情薄如纸。";
StringBuilder sb = new StringBuilder(); //sb是用来存放不重复的
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
boolean exist = false;
for (int j = 0; j < sb.length(); j++) {
if (sb.charAt(j) == c) {
exist = true;
break;
}
}
if (!exist) {
sb.append(c);
}
}
System.out.println(sb.toString());
}Code language: JavaScript (javascript)
方法二:遍历删除重复字符
先把所有字符加到StringBuilder中,然后遍历,前面出现过的则删除后面的。
public static void main(String[] args) {
String s = "人生中有许多的不如意,各人有各人的烦恼,各家有各家的难处。所以,我们在不如意时往往会怨天尤人,道不出的烦,讲不完的恼,只愿自己命不好,总觉自己活得不如别人,看什么都不顺眼,新的怨旧的恨一古脑地涌上心头,展在眼前,于是生出许多感慨:人情薄如纸。";
StringBuilder sb = new StringBuilder(s); //sb用来存放所有字符
for (int i = 0; i < sb.length(); i++) {
char c = sb.charAt(i);
for (int j = i + 1; j < sb.length(); j++) {
if (sb.charAt(j) == c) {
sb.deleteCharAt(j);
j--; //删除后后面的字符前移 所以j要减1
}
}
}
System.out.println(sb.toString());
}Code language: JavaScript (javascript)
方法有很多,同学们要学会思考。