StringBuffer类
引言:
线程(想对于进程而言)
线程安全---->虽然同步---->但执行效率低!
举例:银行的网站,医院的平台
线程不安全--->不同步--->执行效率高
举例:一些论坛网站,相亲网站.........
在是开发中,线程不安全可能会造成死锁(备注)的现象!
说明:线程安全和执行效率是相对的,并且也是困扰开发者的因素!
从API文档来看StringBuffer类综述:
public final class StringBuffer extends Object implements Serializable, CharSequence
特点:1)线程安全的可变字符序列;
2)一个类似于 String
的字符串缓冲区,但通过某些方法调用可以改变该序列的长度和内容;
① StringBuffer的构造方法(三种初始化方式)
1)public StringBuffer()
说明:构造一个其中不带字符的字符串缓冲区,其初始容量为 16 个字符
2)public StringBuffer(int capacity)
说明:构造一个不带字符,但具有指定初始容量的字符串缓冲区
3)public StringBuffer(String str)
说明:构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容;该字符串的初始容量为 16 加上字符串参数的长度
常用的功能:
4)public int length():获取字符串长度数
5)public int capacity():获取当前字符串缓冲区的容量
实例1:
package org.westos.stringbuffer_02;
public class StringBufferDemo {
public static void main(String[] args) {
/* public StringBuffer()
* 构造方法说明:构造一个其中不带字符的字符串缓冲区,其初始容量为 16个字符
* 创建一个字符串缓冲区对象:
* sb.length():查看字符缓冲区字符长度
* sb.capacity():查看字符缓冲区容量(看出默认的容量)
*/
StringBuffer sb = new StringBuffer() ;
System.out.println("sb.length:"+sb.length());
System.out.println("sb.capacity:"+sb.capacity());
System.out.println("----------------------------");
/*public StringBuffer(int capacity)
*构造方法说明:构造一个不带字符,但具有指定初始容量的字符串缓冲区
*
* */
StringBuffer sb2 = new StringBuffer(50) ;
System.out.println("sb2.length:"+sb2.length());
System.out.println("sb2.capacity:"+sb2.capacity());//50
System.out.println("----------------------------");
/* public StringBuffer(String str)
* 说明:构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容;
* 该字符串的初始容量为 16 加上字符串参数的长度
* */
StringBuffer sb3 = new StringBuffer("hello") ;
System.out.println("sb3.length:"+sb3.length());
System.out.println("sb3.capacity:"+sb3.capacity());//默认:初始容量16 + 当前字符串长度
}
}
② StringBuffer中添加功能
1)public StringBuffer append(int/String/char/boolean/double/float....)
功能:当前这个方法追加,给缓冲中追加数据,返回字符串缓冲区本身(经常使用的)
返回值类型:StringBuffer
2)public StringBuffer insert(int offset,String str)
功能:在某一个位置处(索引)去插入str这个字符串,返回字符串缓冲区本身
返回值类型:StringBuffer
实例2:
package org.westos.stringbuffer_02;
public class StringBufferDemo2 {
public static void main(String[] args) {
//创建一个字符串缓冲区对象
StringBuffer sb = new StringBuffer() ;
//追加数据
sb.append("hello") ;
sb.append(true) ;
sb.append(13.45) ;
sb.append('A') ;
sb.append(12.56F);
System.out.println(sb);
/* 对append说明:
* 只是创建了一个对象(未开辟新的对象),在原来对象的内容里添加新的内容
* 对print()说明:重写了Object类toString方法
* StringBuffer类中toString()方法
* 说明:将字符缓冲区转换成String类型
* */
//链式编程sb.append("hello").append(true).append(13.45).append('A').append(12.56F);
/*public StringBuffer insert(int offset,String str)
*说明:在某一个位置处去插入str这个字符串,返回字符串缓冲区本身
*内存情况(理解)
**/
sb.insert(5, "world") ;
System.out.println("sb:"+sb);
}
}
③StringBuffer的删除功能:
1)public StringBuffer deleteCharAt(int index)
说明:删除指定位置处的字符,返回的是字符串缓冲区本身!
2)public StringBuffer delete(int start,int end)
说明:删除从指定位置开始到指定位置结束的字符,返回的是字符串缓冲区本身!
实例3:
package org.westos.stringbuffer_02;
public class StringBufferDemo3 {
public static void main(String[] args) {
//创建字符串缓冲区对象
StringBuffer sb = new StringBuffer() ;
//给缓冲区追加数据
sb.append("hello") ;
sb.append("world") ;
sb.append("java!!") ;
/*public StringBuffer deleteCharAt(int index)
*需求:要删除当前缓冲区中对应索引的字符
*/
sb.deleteCharAt(14);
sb.deleteCharAt(14);
System.out.println("sb:"+sb);
/*public StringBuffer delete(int start,int end)
*从当前索引(star)开始,到(end-1)索引结束
*/
sb.delete(5, 9);//删除制定位置字符
System.out.println("sb:"+sb);
}
}
④StringBuffer的反转功能(重点掌握):
public StringBuffer reverse()
返回值类型:StringBuffer
功能:将此字符串中的字符序列直接反转
实例4:
package org.westos.stringbuffer_02;
import java.util.Scanner;
public class StringBufferDemo4 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//录入并接收数据
System.out.println("请您输入一个字符串:");
String line = sc.nextLine() ;
//可以创建字符串缓冲区对象
StringBuffer sb = new StringBuffer(line) ;
/*
* public String toString()
* 说明:StirngBuffer类型的toString()方法
* 将StringBuffer类型转换成String类型
*/
String result = sb.reverse().toString() ;
System.out.println("result:"+result);
}
}
⑤ StringBuffer的替换功能:
public StringBuffer replace(int start, int end,String str)
功能:从指定位置开始到指定位置(包前不包后)结束的字符用str子字符串去替代
返回值类型:StringBuffer
实例5:
package org.westos.stringbuffer_02;
public class StringBufferDemo5 {
public static void main(String[] args) {
//创建字符串缓冲区对象
StringBuffer sb = new StringBuffer() ;
//给缓冲添加数据
sb.append("hello") ;
sb.append("world") ;
sb.append("java") ;
sb.replace(5, 10, "节日快乐") ;
System.out.println("sb:"+sb);
}
}
⑥StringBuffer的截取功能(得到字符串):
1)public String substring(int start)
功能:从指定位置默认截取到末尾,返回值是一个新的字符串
返回值类型:String
2)public String substring(int start,int end)
功能:从指定位置开始截取到指定位置结束,包前不包后,返回一个新的字符串
返回值类型:String
实例6:
package org.westos.stringbuffer_02;
public class StringBufferDemo6 {
public static void main(String[] args) {
//创建字符串缓冲区对象
StringBuffer sb = new StringBuffer() ;
//添加
sb.append("hello") ;
sb.append("world") ;
sb.append("java") ;
//截取形成新的字符串(创建了一个新的对象)
String s1 = sb.substring(5) ;
System.out.println("s1:"+s1);
//此时字符串缓冲区内容(可以看到上述操作并未对缓冲区内容进行操作,原因?)
System.out.println("sb:"+sb);
//截取形成新的字符串(创建了一个新的对象)
String s2 = sb.substring(5,10) ;
System.out.println("s2:"+s2);
//此时字符串缓冲区内容(可以看到上述操作并未对缓冲区内容进行操作)
System.out.println("sb:"+sb);
}
}
未完待续...............
①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯⑰⑱⑲⑳