StringBuffer类和StringBuilder类
StringBuffer类
我们如果对字符串进行拼接操作时,每次拼接,都会构建一个新的String对象(如:String a="c"+"b",会在常量池中存储c、b以及cb这三个值,一共开辟了三个空间),既耗时,又浪费空间,而StringBuffer就可以解决这个问题,同时它还是一个线程安全的可变字符序列。StringBuffer类的常用方法
public StringBuffer() | 无参构造方法 |
public StringBuffer(int capacity) | 指定容量的字符串缓冲区对象 |
public StringBuffer(String str) | 指定字符串内容的字符串缓冲区对象 |
public int capacity() | 返回当前容量 (理论值) |
public int length() | 返回字符串长度(实际值) |
public StringBuffer append(String str) | 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身 |
public StringBuffer insert(int offset,String str) | 在指定位置把任意类型的数据插入到字符串缓冲区里,并返回字符串缓冲区本身 |
public StringBuffer deleteCharAt(int index) | 删除指定位置的字符,并返回本身 |
public StringBuffer delete(int start,int end) | 删除从指定位置开始到指定位置结束的内容,并返回本身 |
public StringBuffer replace(int start,int end,String str) | 从start开始到end用str替换 |
public StringBuffer reverse() | 字符串反转 |
public String substring(int start) | 从指定位置截取到末尾 |
public String substring(int start,int end) | 从指定位置开始到指定位置结束截取(含头不含尾) |
StringBuffer和String的相互转换
String -- StringBuffer
a:通过构造方法
b:通过append()方法
StringBuffer -- String
a: 使用substring方法
b:通过构造方法
c:通过toString()方法
代码演示
把字符串反转import java.util.Scanner;
public class Reverse {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String n = sc.next();
//创建一个带有字符串的StringBuffer缓冲区对象
StringBuffer buffer = new StringBuffer(n);
//buffer.capacity()是缓冲区的容量,可以改变
System.out.println("容量为:"+buffer.capacity());
//deleteCharAt(0)是删除0位置的元素,返回缓冲区本身
StringBuffer b = buffer.deleteCharAt(0);
System.out.println("删除0位置元素后:"+b);
//length()缓冲区中字符串长度
int l = b.length();
System.out.println("删除后的字符串长度:"+l);
System.out.println("请输入要插入的位置:");
int i = sc.nextInt();
System.out.println("请输入要插入的字符串:");
//insert(元素位置,插入的字符串 )在指定的位置插入指定字符串,
//这里写b和 buffer都可以,因为都是一个对象
StringBuffer in = buffer.insert(i,sc.next() );
System.out.println("插入字符串后的字符串:"+in);
//调用reverse()方法反转字符串
StringBuffer r = buffer.reverse();
System.out.println("反转后:"+r);
}
}
结果
请输入字符串:
爱生活,爱java
容量为:25
删除0位置元素后:生活,爱java
删除后的字符串长度:8
请输入要插入的位置:
0
请输入要插入的字符串:
爱
插入字符串后的字符串:爱生活,爱java
反转后:avaj爱,活生爱
StringBuilder类
StringBuilder类也是一个可变的字符序列,它的常用方法与StringBuffer类的相同,它与StringBuffer类类的区别在于,它是不保证同步(线程不安全)以及比StringBuffer类速度快。代码演示
把字符串反转import java.util.Scanner;
public class Reverse {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入字符串:");
String n = sc.next();
//创建一个带有字符串的StringBuilder缓冲区对象
StringBuilder sb = new StringBuilder(n);
//sb.capacity()是缓冲区的容量,可以改变
System.out.println("容量为:"+sb.capacity());
//deleteCharAt(0)是删除0位置的元素,返回缓冲区本身
StringBuilder b = sb.deleteCharAt(0);
System.out.println("删除0位置元素后:"+b);
//length()字符串长度
int l = b.length();
System.out.println("删除后的字符串长度:"+l);
System.out.println("请输入要插入的位置:");
int i = sc.nextInt();
System.out.println("请输入要插入的字符串:");
//insert(位置,字符串 )在指定位置插入字符串,这里写b和 sb都可以, 因为都是一个对象
StringBuilder in = b.insert(i,sc.next() );
System.out.println("插入字符串后的字符串:"+in);
//调用reverse()方法反转字符串
StringBuilder r = sb.reverse();
System.out.println("反转后:"+r);
}
}
结果
请输入字符串:
我爱你
容量为:19
删除0位置元素后:爱你
删除后的字符串长度:2
请输入要插入的位置:
0
请输入要插入的字符串:
我
插入字符串后的字符串:我爱你
反转后:你爱我