文章目录
前言
上一篇 【Java 常用类】java.lang包(6)String类的常用方法 里讲了String的常用方法,但是String是不可变的,如果需要操作大量字符拼接时太占用内存空间。
现在讲可变字符序列,StringBuilder、StringBuffer类的常用方法。
因为这两个类方法与使用都基本一样,只是多线程环境下安全与非安全。所以这篇文章就用StringBuilder示例。
一、大纲
一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
public final class StringBuilder extends Object implements Serializable, CharSequence
二、使用
1.构造器
1.1 创建
他有不同的构造器用于创建一个可变字符序列StringBuilder。
StringBuilder sb01 = new StringBuilder(); // 创建一个未初始化的StringBuilder
StringBuilder sb02 = new StringBuilder("初始化init"); // 创建一个带有初始化字符串的StringBuilder
StringBuilder sb03 = new StringBuilder(20); // 创建一个指定初始化容量的StringBuilder
2.常用方法
2.1 获取
以下方法可以获取到该StringBuilder中的相关信息。
如:容量、长度、查找字符或字符串出现的位置。
StringBuilder sb = new StringBuilder("hello");
// 获取容量
int c = sb.capacity();
System.out.println(c); // 21
// 获取该字符串长度
int len = sb.length();
System.out.println(len); // 5
// 获取字符或字符串第一次出现的位置(从头开始,或从指定位置开始)
int i = sb.indexOf("e"); // 从头开始
System.out.println(i); // 1
int i1 = sb.indexOf("e", 1); // 从指定位置开始
System.out.println(i1); // 1
// 获取字符或字符串第一次出现的位置(从尾部开始,或从指定尾部位置开始)
int li = sb.lastIndexOf("e"); // 从尾部开始
System.out.println(li); // 1
int li1 = sb.lastIndexOf("e", 5); // 从指定尾部位置开始
System.out.println(li1); // 1
// 获取指定索引处的char值
char ca = sb.charAt(0);
System.out.println(ca); // h
2.2 追加
append(String str)
将指定的字符串追加到此字符序列。
可以将多种数据类型的值,添加到StringBuilder中。
StringBuilder sb = new StringBuilder();
sb.append("hello ");
sb.append(123);
System.out.println(sb); // hello 123
2.3 插入 + 移除
insert(int offset, String str)
将字符串插入此字符序列中。
该方法可以将多种数据类型的值,插入到StringBuilder中。
delete(int start, int end)
移除此序列的子字符串中的字符。
deleteCharAt(int index)
移除此序列指定位置上的 char。
这两个方法可以移除指定位置的字符或字符串。
StringBuilder sb = new StringBuilder("hello");
// 插入
sb.insert(sb.length(), "?"); // 尾部插入一个?
sb.insert(0, '-'); // 首部插入一个-
System.out.println(sb); // -hello?
// 移除
sb.delete(sb.length()-1, sb.length()); // 移除尾部的?
sb.deleteCharAt(0); // 移除指定索引的字符。移除首部的-
System.out.println(sb); // hello
2.4 替换(字符)
setCharAt(int index, char ch)
将给定索引处的字符设置为 ch。
将指定索引处的字符设置为新的字符。
StringBuilder sb = new StringBuilder("hello");
sb.setCharAt(0, 'H');
System.out.println(sb); // Hello
2.5 替换(字符串)
replace(int start, int end, String str)
使用给定 String 中的字符替换此序列的子字符串中的字符。
从指定位置开始到指定位置结束,替换成其他的字符串。
StringBuilder sb = new StringBuilder("hello xxxxx!");
String s = "world";
// 用字符串s从索引为6的位置开始替换到索引为11的位置。
sb.replace(6, 11, s);
System.out.println(sb); // hello world!
2.6 反转字符串
reverse()
将此字符序列用其反转形式取代。
就是将StringBuilder中的字符串,翻转过来。这个方法还挺常用的。
StringBuilder sb = new StringBuilder("hello");
sb.reverse();
System.out.println(sb); // olleh
2.7 获得子字符串
substring(int start, int end) 、substring(int start)
返回一个新的 String,它包含此序列当前所包含字符的子序列。
从指定位置开始获取该字符串的子字符串。和String一样。
StringBuilder sb = new StringBuilder("hello");
String sub = sb.substring(2);
System.out.println(sub); // llo
String sub02 = sb.substring(2, 5);
System.out.println(sub02); // llo
最后
StringBuilder 和 StringBuffer 类用法是一样的,学会任何一个另一个也就会了。
他们两个的好几个方法都和String类是一样的,学过String基本就触类旁通了。
相关
更多常用类请查看:【Java 常用类】目录