Java StringBuilder

来源:互联网 发布:洛奇英雄传n卡设置优化 编辑:程序博客网 时间:2024/06/03 21:26

一、StringBuilder
在Java中,除了可以使用 String 类来存储字符串,还可以使用 StringBuilder 类或 StringBuffer 类存储字符串。当频繁操作字符串时,就会额外产生很多临时变量。使用 StringBuilder 或 StringBuffer 就可以避免这个问题。

看下文档解释:(截取部分)

StringBuffer: String buffers are safe for use by multiple threads.StringBuilder:   This class provides an API compatible with {@code StringBuffer}, but with no guarantee of synchronization.This class is designed for use as a drop-in replacement for{@code StringBuffer} in places where the string buffer was being used by a single thread (as is generally the case). 

StringBuilder 和 StringBuffer 的异同:

1、同 :都是可变字符串
2、异 : StringBuilder 没有实现线程安全,效率比StringBuffer高,一般放于单线程操作
StringBuffer 实现了线程安全,可用于多线程中

因此一般情况下,如果需要创建一个内容可变的字符串对象,应优先考虑使用 StringBuilder 类。

二、StringBuilder 常用的API (演示按顺序执行)

1、创建并初始化一个可变字符串

StringBuilder string = new StringBuilder("Java");System.out.println("最初是string:"+string);//最初是string:Java

2、往 string 后追加内容 ,内容为子字符串

string.append(" I coming ");System.out.println("追加后的string:"+string);//追加后的string:Java I coming 

3、追加 内容除了字符串以外,还可以是基本数据类型

string.append(true);System.out.println("往string后拼接一个布尔类型:"+string);//往string后拼接一个布尔类型:Java I coming truestring.append(5);System.out.println("往string后拼接一个整型变量:"+string);// 往string后拼接一个整型变量:Java I coming true5

备注 : 往 StringBuilder 类型的对象 末尾拼接内容 并不局限于 字符串类型,同样,插入操作 也是一样的 . 也就是说,使用append或者insert方法,都可以追加或插入任何类型的数据 !!

4、插入内容到指定位置

string.insert(0, "Hello,");System.out.println("插入内容的string:"+string);//插入内容的string:Hello,Java I coming true5

5、获取 长度

int stringLength = string.length();System.out.println("字符串的长度:"+stringLength);// 字符串的长度:25

6、指定位置删除

string.deleteCharAt(0);System.out.println("删除第1个字符后字符串为:"+string);// 删除第1个字符后字符串为:ello,Java I coming true5

7、指定范围删除 【start end)

string.delete(0, 2);System.out.println("指定范围删除后的字符串:"+string);// 指定范围删除后的字符串:lo,Java I coming true5

8、 指定范围替换 【start end);

string.replace(0, 2, "he");System.out.println("替换后的字符串为:"+string);// 替换后的字符串为:he,Java I coming true5

9、获取指定位置的字符

char firstChar = string.charAt(0);System.out.println("string的第一个字符是:"+firstChar);// string的第一个字符是:h

10、 判断 “a” 在string 第一次出现的位置,不存在返回-1,存在返回对应下标值

int firstShowIndex =  string.indexOf("a");System.out.println("a在string第一次出现的位置:"+firstShowIndex);//a在string第一次出现的位置:4

11、判断 “a”在string 最后一次出现的位置,不存在返回-1,存在返回对应下标值

int lastShowIndex = string.lastIndexOf("k");System.out.println("a在string最后一次出现的位置:"+lastShowIndex);// a在string最后一次出现的位置:-1

12、反转

string.reverse();System.out.println("反转后的字符串:"+string);// 反转后的字符串:5eurt gnimoc I avaJ,eh

13、可变字符串 转化成 不可变字符串

String newString  =  string.toString();System.out.println("StringBuilder类型 对象转化成  String类型:"+newString);// StringBuilder类型 对象转化成  String类型:5eurt gnimoc I avaJ,eh

demo地址

这里要注意一个细节: 在String类中,可以使用”+”来链接字符串,但是在可变字符串只能使用append()来连接字符串