String的底层是一个不可变的数组,每次重新赋值都会重新创建新的对象(用双引号直接创建同样的值除外);安全性高、效率低;不适用于需要频繁改变字符串的场景。
主要使用方法:
split(regex):根据regex的方式或者内容分隔字符串,并返回一个字符串数组。
length():返回字符串的长度。
concat(str):拼接字符串(同+),返回一个新的字符串。
chatAt(index):返回指定索引位置的字符,类型是char。
startsWith(str) /endsWith(str):判断字符串是否以str开始或者结尾,返回布尔型。
toCharArray():将字符串转换成一个char类型数组。
substring(index start[,index end]):截取字符串,左闭右开;只有一个start,那么截取到最后,另外index end不能大于字符串的长度。
trim():取出字符串首尾的空格,返回一个新的字符串。
replace(str,newstr):将字符串中的str换成newstr,并返回一个新的字符串。
另外,使用双引号("")创建字符串和new String创建字符串,在创建相同的内容时,前者将对象保存在堆中的字符串常量池中,后者则是直接放到堆中。再次创建时,前者直接引用,而后者还需要重新创建。
StringBuffer的底层是一个可变数组,每次重新赋值或改变值的时候,不需要创建新的对象,可根据实际字符长度重新创建数组,每个方法都有synchronized关键字(同步锁);安全性一般,效率一般;多用于多线程场景。
StringBuilder与StringBuffer定义相同,每个方法没有synchronized关键字,每次少一个缓存数组;安全性低,效率高;是用于单线程场景。方法同StringBuffer。
注意:在创建StringBuffer/StringBuilder对象时,只能用new创建:例如StringBuilder bu01 = new StringBuilder("abcdefg"); StringBuilder bu02 = new StringBuilder();另外不能使用+拼接String。
主要使用方法:
indexOf():返回字符串中第一次/最后一次出现str的索引,没有则返回-1
append(str):在末尾添加指定字符串str。
insert(index,str):在指定字符串位置插入字符串str。
delete(index start,index end):删除指定索引区间的字符。
deleteChaAt(index):删除指定位置的字符。
replace(index start,index end,str):用str替换指定区间的字符串。
toString():将StringBuffer对象转换成String对象的字符串
String字符串主要是使用方法补充:
indexOf(str)/lastIndexOf(str):返回字符串中第一次/最后一次出现str的索引,没有则返回-1。
contains(str):判断字符串是否包含str,有则返回true置,无则返回false。
toUpperCase()/toLowerCase():将将字符串(字符)转换成大写/小写,返回新的字符串。
equalsIgnoreCase():比较两个字符串时,忽略大小写。