StringBuilder的介绍
由于String的不可更改的特性,为了方便字符串的修改,Java中又提供了StringBuilder和StringBuffer类。这两个类大部分功能是相同的,我来介绍一下StringBulider常用的一些方法。如果想要查询其它的方法,可以查询API。
方法 | 说明 |
StringBuffer append(String str) | 在尾部追加,相当于String的+=,可以追加:boolean, char, char[], double, float, int, long, Object, String, StringBuff的变量 |
char charAt(int index) | 获取index位置的字符 |
int length() | 获取字符串的长度 |
int capacity() | 获取底层保存字符串空间总的大小 |
void ensureCapacity(int mininmumCapacity)参数: 该方法将所需最小容量作为参数 |
扩容 |
void setCharAt(int index, char ch) | 将index位置的字符设置为ch |
int indexOf(String str) | 返回str第一次出现的位置 |
int indexOf(String str, int fromIndex) | 从fromIndex位置开始查找str第一次出现的位置 |
int lastIndexOf(String str) | 返回最后一次出现str的位置 |
int lastIndexOf(String str, int fromIndex) | 从fromIndex位置开始寻找str最后出现的位置 |
StringBuffer insert(int offset, String str) | 在offset的位置插入:八种基类类型&String类型&Object类型数据 |
StringBuffer deleteCharAt(int index) | 删除index位置的字符 |
StringBuffer delete(int start, int end) | 删除[start, end)之间的字符 |
StringBuffer replace(int start, int end, String str) | 将[start, end)之间的字符置换为str |
String substring(int start) | 从start开始一直到末尾的字符以String的方式返回 |
String substring(int start, int end) | 将[start, end)范围内的字符以String的方式返回 |
StringBuffer reverse() | 反转字符串 |
String toString() | 将所有的字符按照String的方式返回 |
下面举一个长点的例子来介绍一下部分方法:
public static void main(String[] args) { StringBuilder sb1 = new StringBuilder("hello"); StringBuilder sb2 = sb1; //追加:即尾插->字符,字符串,整型数字 sb1.append(' '); //hello sb1.append("world"); //hello world sb1.append(123); //hello world123 System.out.println(sb1); System.out.println(sb1 == sb2);//true System.out.println(sb1.charAt(0));//获得0字号位上的字符h System.out.println(sb1.length());//获取字符串的有效长度:14 System.out.println(sb1.capacity());//获得底层数组的总大小 sb1.setCharAt(0, 'H');//设置任意位置上的字符Hello world123 sb1.insert(0, "Hello world!!!");//Hello world!!!Hello world123 System.out.println(sb1); System.out.println(sb1.indexOf("Hello"));//获得Hello第一次出现的位置:0 System.out.println(sb1.lastIndexOf("Hello"));//获得Hello最后一次出现的位置:14 sb1.deleteCharAt(0);//删除首字符 sb1.delete(0, 5);//删除[0,5)之间的字符 String str = sb1.substring(0, 5);//截取[0,5)区间中的字符并以String类型返回 System.out.println(str); sb1.reverse();//字符串逆转 str = sb1.toString();//将StringBuffer的方式返回 System.out.println(str); }
从上述例子可以看出:String和StringBuilder最大的区别在于String的内容无法修改,而StringBuilder内容可以修改。频繁使用字符串的情况下考虑使用StringBuilder.
注:String和StringBuilder类不能直接转换。如果想要互相转换,可以采用以下原则:
1.String变为StringBuilder:利用StringBuilder的构造方法或者append()方法
2.StringBuilder变为String:调用toString()方法
常见问题
1.String,StringBuffer,StringBuilder之间的区别:
(1)String的内容不可修改,StringBuffer和StringBuilder的内容可以修改
(2)StringBuffer和StringBuilder的大部分功能是相似的
(3)StringBuffer采用同步处理,属于线程安全操作(StringBuffer前面有synchronized关键字以保证线程安全);而StringBuilder未采用同步处理,属于线程不安全操作
(4)StringBuffer性能较差,StringBuilder性能较好
2.