StringBuilder类

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的常用方法

  1. append方法:追加方法
  2. insert方法:插入方法
  3. delete方法:删除方法
  4. 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)

方法有很多,同学们要学会思考。

Previous:
Next:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注