StringBuffer的一些常用方法 - Java
(1)StringBuffer与String区别
String中不能改变字符串的值,如果要改变String中的值,此时String的地址也会发生改变。当如果要对字符串进行多次大量的修改时,使用String对字符串进行修改,则会浪费大量的内存空间,也会使得代码效率低。对此,当我们对字符串进行修改时,我们应该使用StringBuffer类来对字符串进行修改。
通过代码对StringBuffer与String进行理解
import java.lang.*;
public class Main {
public static void main(String[] args) {
String str = "Hello World!!!";
//对字符串进行操作,String会改变地址
str.replace('H','W');
System.out.println(str);
StringBuffer strbu = new StringBuffer();
strbu.append("Hello ");
strbu.append("World!!!");
System.out.println(strbu);
}
}
执行结果为:
"C:\Program Files\Java\jdk1.8.0_172\bin\java.exe" "-javaagent:D:\env\IntelliJ IDEA 2019.2.4\lib\idea_rt.jar=52197:D:\env\IntelliJ IDEA 2019.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_172\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\rt.jar;D:\yauproject\Demo01\out\production\Demo01" com.cn.ex.Main
Hello World!!!
Hello World!!!
Process finished with exit code 0
可见,我们对String类的字符串进行了字符的替换操作,可原来的字符串并没有改变。其原因是String改变之后的值存在了另外一片内存之中,所以原来地址中的值没有发生改变。
而StringBuffer类,我们将两个字符串进行了连接操作,而原来的地址上的值发生了改变,变为了对字符串操作完之后的值。所以,String对字符串进行改变之后,地址会发生改变,地址中存放的值改变之后的值,原地址中的值没有发生改变,StringBuffer是直接在原来的地址上对字符串进行操作的。
(2)StringBuffer的一些常用类
(1)字符串的拼接.append()
import java.lang.*;
public class Main {
public static void main(String[] args) {
StringBuffer strbu = new StringBuffer();
strbu.append("Hello ");
strbu.append("World");
strbu.append("!!!");
System.out.println(strbu);
}
}
执行结果为:
"C:\Program Files\Java\jdk1.8.0_172\bin\java.exe" "-javaagent:D:\env\IntelliJ IDEA 2019.2.4\lib\idea_rt.jar=52399:D:\env\IntelliJ IDEA 2019.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_172\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\rt.jar;D:\yauproject\Demo01\out\production\Demo01" com.cn.ex.Main
Hello World!!!
Process finished with exit code 0
append方法,就是对字符串进行连接。上述为代码为:Hello +World+!!!
(2)字符串的反转.reverse()
import java.lang.*;
public class Main {
public static void main(String[] args) {
StringBuffer strbu = new StringBuffer();
strbu.append("Hello ");
strbu.append("World");
strbu.append("!!!");
System.out.println(strbu);
strbu.reverse();
System.out.println(strbu);
}
}
执行结果为:
"C:\Program Files\Java\jdk1.8.0_172\bin\java.exe" "-javaagent:D:\env\IntelliJ IDEA 2019.2.4\lib\idea_rt.jar=52433:D:\env\IntelliJ IDEA 2019.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_172\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\rt.jar;D:\yauproject\Demo01\out\production\Demo01" com.cn.ex.Main
Hello World!!!
!!!dlroW olleH
Process finished with exit code 0
reverse()方法,就是对字符串进行反转。
(3)删除字符串.delete()
import java.lang.*;
public class Main {
public static void main(String[] args) {
StringBuffer strbu = new StringBuffer();
strbu.append("Hello ");
strbu.append("World");
strbu.append("!!!");
System.out.println(strbu);
strbu.delete(6,11);
System.out.println(strbu);
}
}
代码执行结果为:
"C:\Program Files\Java\jdk1.8.0_172\bin\java.exe" "-javaagent:D:\env\IntelliJ IDEA 2019.2.4\lib\idea_rt.jar=52594:D:\env\IntelliJ IDEA 2019.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_172\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\rt.jar;D:\yauproject\Demo01\out\production\Demo01" com.cn.ex.Main
Hello World!!!
Hello !!!
Process finished with exit code 0
delect()方法,就是删除字符串中的字符,(i,j)意思是从第i个位置开始,删除 j - i 个值。上述中由,第6个下标的之开始删除5个字符,所以删除的是World字符串
(4)插入字符.insert()
import java.lang.*;
public class Main {
public static void main(String[] args) {
StringBuffer strbu = new StringBuffer();
strbu.append("Hello ");
strbu.append("World");
strbu.append("!!!");
System.out.println(strbu);
strbu.delete(6,11);
System.out.println(strbu);
strbu.insert(6,"World");
System.out.println(strbu);
}
}
代码执行结果为:
"C:\Program Files\Java\jdk1.8.0_172\bin\java.exe" "-javaagent:D:\env\IntelliJ IDEA 2019.2.4\lib\idea_rt.jar=52599:D:\env\IntelliJ IDEA 2019.2.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_172\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_172\jre\lib\rt.jar;D:\yauproject\Demo01\out\production\Demo01" com.cn.ex.Main
Hello World!!!
Hello !!!
Hello World!!!
Process finished with exit code 0
insert()方法,就是在第i个位置插入字符。上述 insert(6,“World”) 的意思是,在下标为6的位置插入字符“World”。