1.StringBuffer类引入
在实际开发当中,我们经常会使用到字符串连接的操作,如果用String来操作,则使用“+”号完成字符串的连续操作。
使用String连接字符串,代码性能会非常低,因为String的内存不可改变
解决这个问题的方法是使用StringBuffer
2.StringBuffer类源码分析
查看StringBuffer的源代码
3.StringBuffer常用操作方法
方法名称 | 描述 |
public StringBuffer() | 构造一个空的StringBuffer对象 |
public StringBuffer(String str) | 将指定的String变为StringBuffer的内容 |
public StringBuffer(CharSequence seq) | 接受CharSequence接口的实例 |
public StringBuffer append(数据类型 b) | 提供了很多的append()方法,用于进行字符串连接 |
public StringBuffer delete(int start,int end) | 删除指定位置的内容 |
public int indexOf(String str) | 字符串的查询功能 |
publicStringBuffer insert(int offset,数据类型 b) | 在指定位置上增加一个内容 |
public StringBuffer replace(int start,int end,String str) | 将指定范围的内容替换成其他内容 |
public StringBuffer reverse() | 字符串反转 |
public String substring(int start) | 字符串截取 |
public String substring(int start,int end) | 截取指定范围的字符串 |
4.StringBuffer的兄弟StringBuilder
一个可变的字符串序列。此类提供一个与StringBuffer兼容的API,但不保证同步。改类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优化先采用该类,因为在大多数实现中,它比StringBuffer要快
package com.vince.stringbuffer;
public class StringBufferDemo {
public static void main(String[] args) {
String s = "小白";
//默认字符数组的大小是16
//扩展方式:(原来的长度+1)*2
//如果我们可以确定整个长度,可以调用带初始容量的构造方法
StringBuffer sb = new StringBuffer();
sb.append("此刻打盹,你将做梦;");
sb.append("此刻学习,你将圆梦。");
sb.append("现在淌的哈喇子,将成为未来的眼泪");
//删除指定位置的字符串,包含开始位置,不包含结束位置
sb.delete(31, 34);
System.out.println(sb.toString());
//查询指定字符串第一次出现的位置
int index = sb.indexOf("你");
System.out.println("‘你’字的位置是 "+index);
//插入方法
sb.insert(31, "明天的");
System.out.println(sb);
//替换方法
sb.replace(0, 2, "现在");
System.out.println(sb);
//反转
// sb.reverse();
// System.out.println(sb);
//字符串截取
String s1 = sb.substring(20,27);
System.out.println(s1);
//StringBuilder:synchronized关键字表示同步
//单线程访问时使用,效率更高,线程不安全
//StringBuffer:多线程访问时使用,效率较低,线程安全
StringBuilder sb2 = new StringBuilder();
}
}