java可变字符串StringBuffer类

                                         StringBuffer与String的不同之处

        StringBuffer类是线程安全的可变字符序列,一个类似于String类的字符串缓冲区,两者本质上是一样的,但StringBuffer类的执行效率要比String类快很多,而String类创建的字符串对象是不可修改的,StringBuffer类创建的对象是可修改的,且实体容量会随着存放的字符串增加而自动增加。

         String只能赋值一次,每一次内容发生改变都生成了一个新的对象,然后原有的对象引用新的对象,所以说String本身是不可改变的。每一次改变String的字符串内容,都会在内存创建新的对象,而每一次生成新对象都会对系统性能产生影响,这会降低java虚拟机的工作效率。如下图所示。

222

而StringBuffer不同,每次都是操作自身对象,而不是生成新的对象,其所占空间会随着字符内容增加而扩充,做大量的修改操作时,不会因产生大量匿名对象而影响系统性能,如下图所示:

44444

下面讲解几个StringBuffer类用法:

1.创建StringBuffer类

创建一个新的StringBuffer对象必须用关键字new,而不能像String对象那样直接引用字符串常量。语法如下:

StringBuffer sbf = new StringBuffer();			//创建一个对象,无初始值
StringBuffer sbf = new StringBuffer("abc");		//创建一个对象,初始值为“abc”
StringBuffer sbf = new StringBuffer(32);		//创建一个对象,初始容量为32个字符

2.append()方法

append()方法可将参数转换成字符串,然后追加到此序列中,语法如下:

  • sbf.append(obj)
    • obj:任意数据类型对象,例如String、int、double、Boolean等,都转变成字符串的表示形式

使用append()方法分别来追加字符常量,其他StringBuffer对象和整数变量,输出最后拼接结果,代码如下:

public class HelloJava {
	public static void main(String[] args) {
		//创建StringBuffer对象
		StringBuffer sbf = new StringBuffer("门前大桥下,");
		//追加字符串常量
		sbf.append("游过一群鸭,");
		//创建其他StringBuffer对象
		StringBuffer tmp = new StringBuffer("快来快来数一数,");
		//追加StringBuffer对象
		sbf.append(tmp);
		//创建整数变量
		int x = 24678;
		sbf.append(x);
		System.out.println(sbf);
	}
}

返回结果:

门前大桥下,游过一群鸭,快来快来数一数,24678

3.setCharAt()方法

将给定索引处的字符修改为ch,语法如下:

  • sbf.setCharAt(index,ch)
    • index:被替换字符的索引
    • ch:替换后的字符

创建一个手机号,将索引为3~6的字符修改成X,代码如下:

public class HelloJava {
	public static void main(String[] args) {
		//创建一个StingBuffer对象,一个手机号
		StringBuffer phone = new StringBuffer("18310014567");
		System.out.println("原手机号:" + phone);
		//记录索引3~6
		for(int i=3;i<=6;i++) {
			//把索引3~6的字符改为“X”
			phone.setCharAt(i, 'X');
		}
		System.out.println("更改完后的手机号:" + phone);
	}
}

返回结果:

原手机号:18310014567
更改完后的手机号:183XXXX4567

4.inser()方法

将字符串str插入到指定索引值offset位置上,语法如下:

  • sbf.insert(offset,str)
    • offset:插入的索引
    • str:插入的字符串

创建一个StringBuffer对象,在索引6的位置插入字符串‘’七‘’,代码如下:

public class HelloJava {
	public static void main(String[] args) {
		//创建一个StingBuffer对象,一个手机号
		StringBuffer sbf = new StringBuffer("一二三四五六八");
		System.out.println("原字符串:" + sbf);
		//插入字符七
		sbf.insert(6, "七");
		System.out.println("在索引位置6插入一个字符‘七’:" + sbf);
	}
}

返回结果:

原字符串:一二三四五六八
在索引位置6插入一个字符‘七’:一二三四五六

5.delete()方法

delete()方法可移除此序列的子字符串中的字符,该子字符串是从指定的索引start处开始,一直到索引end-1处,如果end-1超出最大索引范围,则一直到序列尾部,如果start等于end,则不发生任何更改,语法如下:

  • sbf.delete(start,end)
    • start:起始索引(包含)
    • end:结束索引(不包含)

使用StringBuffer的delete方法将带有数字的字符串去掉,代码如下:

public class HelloJava {
	public static void main(String[] args) {
		//创建StringBuffer对象,包含字母和数字
		StringBuffer sbf = new StringBuffer("ABC1234DEFG");
		System.out.println("原字符串:" + sbf);
		//去除掉字符串数字
		sbf.delete(3, 7);
		System.out.println("更改后的字符串:" + sbf);
	}
}

返回结果:

原字符串:ABC1234DEFG
更改后的字符串:ABCDEFG

6.其他的用法

除了几个常用方法以外,StringBuffer类中还有类似String类的方法,下面通过一个实例演示如何使用StringBuffer类中的方法。

public class HelloJava {
	public static void main(String[] args) {
		//创建StringBuffer对象
		StringBuffer sbf = new StringBuffer("ABCDEFG");
		//输出原值
		System.out.println("sbf的原值为:" + sbf);
		//获取字符串序列的长度
		int length = sbf.length();
		System.out.println("sbf的长度为:" + length);
		//获取索引为5的字符
		char chr = sbf.charAt(5);
		System.out.println("索引为5的字符为:" + chr);
		//获取DEF字符串所在的索引位置
		int index = sbf.indexOf("DEF");
		System.out.println("DEF字符串的索引位置为:" + index);
		//截取从索引0开始至索引2之间的字符串
		String substr = sbf.substring(0,2);
		System.out.println("索引0开始至索引2之间的字符串为:" + substr);
		//将从索引2开始至索引5之间的字符序列替换成“1234”
		StringBuffer tmp = sbf.replace(2, 5, "1234");
		System.out.println("替换后的字符为:" + tmp);
	}
}

返回结果:

sbf的原值为:ABCDEFG
sbf的长度为:7
索引为5的字符为:F
DEF字符串的索引位置为:3
索引0开始至索引2之间的字符串为:AB
替换后的字符为:AB1234FG

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值