第五章 Java API(二)

本文介绍了Java中的StringBuffer类,用于可变字符串操作,对比了它与String的区别,并展示了如何添加、删除和修改字符串。同时,讨论了StringBuilder类,指出其与StringBuffer的主要区别在于线程安全性,并通过性能测试显示StringBuilder在非同步环境下具有更高的效率。
摘要由CSDN通过智能技术生成

5.1.3 StringBuffer类

  • 为了对字符串进行修改,Java提供了一个StringBuffer类(也称字符串缓冲区)。
  • StringBuffer类和String类的最大区别在于它的内容和长度都是可以改变的。
  • StringBuffer类似一个字符容器,当在其中添加或者删除字符时,并不会产生新的StringBuffer对象

针对添加和删除字符的操作,StringBuffer类提供了一系列的方法。

表5-3 StringBuffer类的常用方法

方法声明功能描述
StringBuffer apppend(char c)添加参数到StringBuffer对象中
StringBuffer insert(int offset,String str)在字符串中的offset位置插入字符串str
StringBuffer deleteCharAt(int index)删除此序列指定位置的字符
StringBuffer delete(int start,int end)删除StringBuffer对象中指定范围的字符或字符串序列
StringBuffer replace(int start,int end,String s)在StringBuffer对象中替换指定的字符或字符串序列
void setCharAt(int index,char ch)修改指定位置index处的字符序列
String toString()返回StringBuffer缓冲区中的字符串
StringBuffer reverse()将此字符序列列用其反转形式取代

案例学习5-8

public class Example08 {
	public static void main(String[] args) {
		System.out.println("1、添加------------------------");
		add();
		System.out.println("2、删除------------------------");
		remove();
		System.out.println("3、修改------------------------");
		alter();
	}
	public static void add() {
		StringBuffer sb = new StringBuffer(); // 定义一个字符串缓冲区
		sb.append("abcdefg"); // 在末尾添加字符串
		System.out.println("append添加结果:" + sb);
		sb.insert(2, "123"); // 在指定位置插入字符串
		System.out.println("insert添加结果:" + sb);
	}
	public static void remove() {
		StringBuffer sb = new StringBuffer("abcdefg");
		sb.delete(1, 5); // 指定范围删除
		System.out.println("删除指定位置结果:" + sb);
		sb.deleteCharAt(2); // 指定位置删除
		System.out.println("删除指定位置结果:" + sb);
		sb.delete(0, sb.length()); // 清空缓冲区
		System.out.println("清空缓冲区结果:" + sb);
	}
	public static void alter() {
		StringBuffer sb = new StringBuffer("abcdef");
		sb.setCharAt(1, 'p'); // 修改指定位置字符
		System.out.println("修改指定位置字符结果:" + sb);
		sb.replace(1, 3, "qq"); // 替换指定位置字符串或字符
		System.out.println("替换指定位置字符(串)结果:" + sb);
		System.out.println("字符串翻转结果:" + sb.reverse());
	}
}

运行结果→

1、添加------------------------
append添加结果:abcdefg
insert添加结果:ab123cdefg
2、删除------------------------
删除指定位置结果:afg
删除指定位置结果:af
清空缓冲区结果:
3、修改------------------------
修改指定位置字符结果:apcdef
替换指定位置字符(串)结果:aqqdef
字符串翻转结果:fedqqa

5.1.4 StringBuilder类 

StringBuffer类和StringBuilder类的对象都可以被多次修改,并不产生新的未使用对象。

StringBuffer不能被同步访问,而StringBuilder可以被同步访问。      ------区别

对比StringBuilder与StringBuffer的运行效率→

案例学习5-9

public class Example09{
    private static final int TIMES = 100000;
    public static void main(String[] args) {
    	Example09.testString();
    	Example09.testStringBuffer();
    	Example09.testStringBuilder();
    }
    //String时间效率测试
      public static void testString() {
		        long startTime = System.currentTimeMillis();
		        String str = "";
		        for (int i = 0; i < TIMES; i++) {
		            str += "test";
		        }
		        long endTime = System.currentTimeMillis();
		        System.out.println("String test usedtime: " 
		        + (endTime - startTime));
		    }
		    //StringBuffer时间效率测试(线程安全)
		    public static void testStringBuffer() {
		        long startTime = System.currentTimeMillis();
		        StringBuffer str = new StringBuffer();
		        for (int i = 0; i < TIMES; i++) {
		            str.append("test");
		        }
		        long endTime = System.currentTimeMillis();
		        System.out.println("StringBuffer test usedtime:  " + (endTime - startTime));
		    }
		    //StringBuffer时间效率测试(非线程安全)
		    public static void testStringBuilder() {
		        long startTime = System.currentTimeMillis();
		        StringBuilder str = new StringBuilder();
		        for (int i = 0; i < TIMES; i++) {
		            str.append("test");
		        }
		        long endTime = System.currentTimeMillis();
		        System.out.println("StringBuilder test usedtime: " + (endTime - startTime));
		    }
		}

运行结果→

String test usedtime: 4596
StringBuffer test usedtime:  4
StringBuilder test usedtime: 3

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值