因为String类是final的,每次进行修改时实际上都返回的一个新的Stirng实例。频繁修改的话会对系统消耗非常大。Java为我们提供了StringBuilder和StringBuffer两个类
1.StringBuilder和StringBuffer之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。所以并发访问的时候需要使用StringBuffer,要求速度但并不要求线程安全的时候用StringBuilder
接下来说一下StringBuffer的API
2.public StringBuffer append(String s) -> 向StringBuffer实例后面追加字符串并返回该StringBuffer实例
public class Main {
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer();
sb1.append("aaabbb");
System.out.println(sb1);
sb1.append("cccddd");
System.out.println(sb1);
//通过toString()将StringBuffer转成String实例
String str = sb1.toString();
System.out.println(str);
}
}
执行结果:
aaabbb
aaabbbcccddd
aaabbbcccddd
3.public delete(int start, int end) -> 删除指定位置之间的字符串
public class Main {
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer();
sb1.append("aaabbb");
System.out.println(sb1);
sb1.delete(1,3);
System.out.println(sb1);
}
}
执行结果:
aaabbb
abbb
4.insert(int offset, String str) ->向StringBuffer实例中间插入字符串并返回该StringBuffer实例
public class Main {
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer();
sb1.append("aaabbb");
System.out.println(sb1);
sb1.insert(1,"ccc");
System.out.println(sb1);
}
}
执行结果:
aaabbb
acccaabbb
5.replace(int start, int end, String str) ->向StringBuffer实例start到end中间替换str字符串并返回该StringBuffer实例
public class Main {
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer();
sb1.append("aaabbb");
System.out.println(sb1);
sb1.replace(1,5,"ccc");
System.out.println(sb1);
}
}
执行结果:
aaabbb
acccb
6.public StringBuffer reverse() ->将StringBuffer实例内容反转并返回该StringBuffer实例
public class Main {
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer();
sb1.append("abcdefg");
System.out.println(sb1);
sb1.reverse();
System.out.println(sb1);
}
}
执行结果:
abcdefg
gfedcba
7.char charAt(int index) ->返回StringBuffer实例指定索引处的 char 值。
public class Main {
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer();
sb1.append("abcdefg");
System.out.println(sb1);
char c = sb1.charAt(3);
System.out.println(c);
}
}
执行结果:
abcdefg
d
8.int indexOf(String str) ->返回StringBuffer实例中第一次出现的目标字符串在该StringBuffer实例中的索引。
public class Main {
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer();
sb1.append("abcdbcd");
System.out.println(sb1);
int i1 = sb1.indexOf("bc");
//第二个参数表示从下标2开始往后数(包括2)
int i2 = sb1.indexOf("bc",2);
System.out.println(i1);
System.out.println(i2);
}
}
执行结果:
abcdbcd
1
4
int lastIndexOf(String str)->返回StringBuffer实例中最后一次出现的目标字符串在该StringBuffer实例中的索引。
public class Main {
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer();
sb1.append("abcdbcd");
System.out.println(sb1);
//只有一个参数表示从最后一位开始往前数
int i1 = sb1.lastIndexOf("bc");
//第二个参数表示从下标3开始往前数(包括3)
int i2 = sb1.lastIndexOf("bc",3);
System.out.println(i1);
System.out.println(i2);
}
}
执行结果:
abcdbcd
4
1
9.void setCharAt(int index, char ch) ->将StringBuffer实例中index位置的字符设置成ch
public class Main {
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer();
sb1.append("abcdbcd");
System.out.println(sb1);
sb1.setCharAt(3,'k');
System.out.println(sb1);
}
}
执行结果:
abcdbcd
abckbcd
10.String substring(int start) ->返回一个字符串,内容是StringBuffer实例从start位置截取到最后位置
public class Main {
public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer();
sb1.append("abcdbcd");
System.out.println(sb1);
String str1 =sb1.substring(3);
//第二个参数表示截取的终止位置
String str2 =sb1.substring(3,5);
System.out.println(str1);
System.out.println(str2);
}
}
执行结果:
abcdbcd
dbcd
db