-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
一、StringBuffer类的概述
线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
二、StringBuffer和String的区别
String: 长度固定,内容不可变,底层是一个长度固定的字符数组。
StringBuffer: 长度不固定,内容可以改变,底层是一个长度可变的字符数组。
三、StringBuffer类的构造方法
A:StringBuffer的构造方法:
public StringBuffer():构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符。
public StringBuffer(int capacity):构造一个不带字符,但具有指定初始容量的字符串缓冲区。
public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
B:StringBuffer的方法:
public int capacity():返回当前容量。 理论值
public int length():返回长度(字符数)。 实际值
package cn.hebei.sjz_StringBuffer;
/*
* StringBuffer类的构造方法
*/
public class Demo {
public static void main(String[] args) {
// 无参构造
StringBuffer sb = new StringBuffer();
System.out.println(sb);//
// 当前容量
System.out.println(sb.capacity());// 16
// 字符串长度
System.out.println(sb.length());// 0
// 指定初始容量
StringBuffer sb1 = new StringBuffer(5);
System.out.println(sb1);//
// 当前容量
System.out.println(sb1.capacity());// 5
// 字符串长度
System.out.println(sb1.length());// 0
// 指定字符串内容
StringBuffer sb2 = new StringBuffer("zheshi");
System.out.println(sb2);// zheshi
// 当前容量
System.out.println(sb2.capacity());// 22
// 字符串长度
System.out.println(sb2.length());// 6
}
}
四、StringBuffer类的添加功能
public StringBuffer append(String str):(做拼接)
可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
public StringBuffer insert(int offset,String str):
在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
package cn.hebei.sjz_StringBuffer;
/*
* StringBuffer类的添加功能
*/
public class Demo1 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
// 拼接
sb.append("hello");
System.out.println(sb);// hello
sb.append("你好");
System.out.println(sb);// hello你好
// 在指定索引位置插入字符串
sb.insert(1, "你好");
System.out.println(sb);// h你好ello你好
}
}
五、StringBuffer的删除功能
public StringBuffer deleteCharAt(int index):
删除指定位置的字符,并返回本身。
public StringBuffer delete(int start,int end):
删除从指定位置开始指定位置结束的内容,并返回本身。
package cn.hebei.sjz_StringBuffer;
/*
* StringBuffer的删除功能
*/
public class Demo2 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("helloworld");
// 删除指定位置上的字符
sb.deleteCharAt(1);
System.out.println(sb);// hlloworld
// 删除某一段字符串,包括开始索引,不包含结束索引
sb.delete(1, 4);// 删除从索引为1到索引为3的这段字符串,不包含索引4
System.out.println(sb);// hworld
}
}
A:StringBuffer的替换功能
public StringBuffer replace(int start,int end,String str):
从start开始到end用str替换
B:StringBuffer的反转功能
public StringBuffer reverse():
package cn.hebei.sjz_StringBuffer;
/*
* StringBuffer的替换和反转功能
*/
public class Demo3 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer("zheshishui");
// 替换功能
StringBuffer sb1 = sb.replace(1, 4, "hehe");
System.out.println(sb1);// zhehehishui
System.out.println(sb);// zhehehishui
// 判断替换后返回的是否是缓冲字符串本身
System.out.println(sb == sb1);// true
// 反转功能
sb.reverse();
System.out.println(sb);// iuhsihehehz
}
}
public String substring(int start):
从指定位置截取到末尾,生成一个新的字符串,其字符串缓冲区不会发生改变。
public String substring(int start,int end):
截取从指定位置开始到结束位置,包括开始位置,不包括结束位置。
注意:返回值类型不再是StringBuffer本身,而是String类型。
package cn.hebei.sjz_StringBuffer;
/*
* StringBuffer的截取功能
*
*/
public class Demo4 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("zheshishui");
// 从索引为3的地方开始到末尾截取字符串
System.out.println(sb.substring(3));// shishui
System.out.println(sb);// zheshishui
// 截取从指定位置开始到结束位置的字符串,包括开始位置,不包括结束位置
System.out.println(sb.substring(1, 4));// hes
System.out.println(sb);// zheshishui
}
}
A:String -- StringBuffer
a:通过构造方法
b:通过append()方法()(常用) 符合返回值类型为StringBuffer类型,参数为String类型。
c:通过insert()方法 索引从0开始。
d:通过replace()方法 开始索引从0开始。
package cn.hebei.sjz_StringBuffer;
/*
* StringBuffer 和 String 之间的相互转换
* String-->StringBuffer
*/
public class Demo5 {
public static void main(String[] args) {
// 通过构造方法
StringBuffer sb = new StringBuffer("zheshishui");
System.out.println(sb);// zheshishui
// 通过append()方法
StringBuffer sb1 = new StringBuffer();
sb1.append("zheshishui");
System.out.println(sb1);// zheshishui
// 通过insert()方法
StringBuffer sb2 = new StringBuffer();
sb2.insert(0, "zheshishui");
System.out.println(sb2);// zheshishui
// 通过replace()方法
StringBuffer sb3 = new StringBuffer();
sb3.replace(0, sb3.capacity(), "zheshishui");
System.out.println(sb3);// zheshishui
}
}
B:StringBuffer -- String
a:通过String构造方法
b:通过StringBuffer的toString()方法(常用)
c:通过StringBuffer的substring()方法 从索引为0的位置开始。
d:通过String的valueOf()方法 可以将任意引用类型的对象转换成String类型。
package cn.hebei.sjz_StringBuffer;
/*
* StringBuffer和String相互转换
* StringBuffer --> String
*/
public class Demo6 {
public static void main(String[] args) {
// 构造方法
String s = new String("zheshishui");
System.out.println(s);// zheshishui
// 通过String的valueOf()方法
String s1 = new String();
System.out.println(s1.valueOf("zheshishui"));// zheshishui
// 通过StringBuffer的 subString()方法
StringBuffer sb = new StringBuffer("zheshishui");
System.out.println(sb.substring(0));// zheshishui
// 通过StringBuffer的toString()方法
StringBuffer sb2 = new StringBuffer("zheshishui");
System.out.println(sb2.toString());// zheshishui
}
}
练习1:
package cn.hebei.sjz_StringBuffer;
/*
* 把数组中的数据按照指定个格式拼接成一个字符串
* 举例:
* int[] arr = {1,2,3};
* 输出结果:[1,2,3]
* 用StringBuffer的功能实现
*/
public class Test {
public static void main(String[] args) {
int[] arr = { 1, 2, 3 };
// 创建StringBuffer对象
StringBuffer sb = new StringBuffer();
// 先拼接[
sb.append("[");
// 遍历数组
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
sb.append(arr[i]);
sb.append("]");
break;
}
sb.append(arr[i]);
sb.append(",");
}
// 转换成String类型
System.out.println(sb.toString());
}
}
练习2:
package cn.hebei.sjz_StringBuffer;
import java.util.Scanner;
/*
* 把字符串反转
* 举例:键盘录入"abc"
* 输出结果:"cba"
*
* 用StringBuffer的功能实现
*/
public class Test1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入:");
// 键盘录入字符串
String s = sc.next();
// 创建StringBuffer对象
StringBuffer sb = new StringBuffer();
// 将字符串拼接到缓冲字符串中
sb.append(s);
// 反转并转换成String类型
System.out.println(sb.reverse().toString());
}
}
String:字符串
jdk1.0
长度固定
内容不能改变
底层实现是一个长度固定的字符数组
StringBuffer:
jdk1.0
长度可变
内容可变
线程安全,效率低
底层实现是一个长度不固定的字符数组
StringBuilder:
jdk1.5
长度可变
内容可变
线程不安全,效率高
底层实现是一个长度不固定的字符数组
StringBuffer和数组区别
数据类型
StringBuffer里面只能是字符吧,就是你不是字符追加进来都变成字符了
数组可以根据你设定的类型存储同一类型的元素
长度:
数组长度固定
StringBuffer容量可以变的
共同点: 都可以存储多个元素