1-java常见对象StringBuffer
13.01_常见对象(StringBuffer类的概述)
- A:StringBuffer类概述
- 通过JDK提供的API,查看StringBuffer类的说明
- 线程安全的可变字符序列
- B:StringBuffer和String的区别
- String是一个不可变的字符序列
- StringBuffer是一个可变的字符序列
13.02_常见对象(StringBuffer类的构造方法)
- A:StringBuffer的构造方法:
- public StringBuffer():无参构造方法
- public StringBuffer(int capacity):指定容量的字符串缓冲区对象
- public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
- B:StringBuffer的方法:
- public int capacity():返回当前容量。 理论值
- public int length():返回长度(字符数)。 实际值
- C:案例演示
- 构造方法和长度方法的使用
@Test
public void testInit() {
StringBuffer sb1 = new StringBuffer();
//容器中的字符个数,实际值
System.out.println("--sb1.length()--"+sb1.length()); //0
//容器的初始容量,理论值
System.out.println("--sb1.capacity()--"+sb1.capacity());//16
StringBuffer sb2 = new StringBuffer(10);
System.out.println("--sb2.length()--"+sb2.length());//0
System.out.println("--sb2.capacity()--"+sb2.capacity());//10
StringBuffer sb3 = new StringBuffer("sb hello world");
//实际字符的个数
System.out.println("--sb3.length()--"+sb3.length());//14
//字符串的length + 初始容量(16)
System.out.println("--sb3.capacity()--"+sb3.capacity());//30
}
<pre>
*打印结果是:
--sb1.length()--0
--sb1.capacity()--16
--sb2.length()--0
--sb2.capacity()--10
--sb3.length()--14
--sb3.capacity()--30
</pre>
13.03_常见对象(StringBuffer的添加功能)
- A:StringBuffer的添加功能
- public StringBuffer append(String str):
- 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
- public StringBuffer insert(int offset,String str):
- 在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
- public StringBuffer append(String str):
- B.案例展示:
- 添加方法的使用
@Test
public void testSBAppend_Insert(){
StringBuffer sb1 = new StringBuffer();
sb1.append("abc");
System.out.println("--append--"+sb1.toString());
StringBuffer sb2 = new StringBuffer("abc");
//在指定位置添加元素,如果没有指定位置的索引就会报索引越界异常
sb2.insert(1, "123");
//StringBuffer类中重写了toString方法,显示的是对象中的属性值
System.out.println("--insert--"+sb2.toString());
}
*打印结果是: --append--abc --insert--a123bc
13.04_常见对象(StringBuffer的删除功能)
- A:StringBuffer的删除功能
- public StringBuffer deleteCharAt(int index):
- 删除指定位置的字符,并返回本身
- public StringBuffer delete(int start,int end):
- 删除从指定位置开始指定位置结束的内容,并返回本身
- public StringBuffer deleteCharAt(int index):
- B:案例展示
- 删除方法的使用
@Test
public void testSBDelete(){
StringBuffer sb1 = new StringBuffer("abcde");
//deleteCharAt(int index):根据索引删除掉索引位置上对应的字符
//当缓冲区中这个索引上没有元素的时候就会报StringIndexOutOfBoundsException
sb1.deleteCharAt(1);
System.out.println("--deleteCharAt--"+sb1.toString());
StringBuffer sb2 = new StringBuffer("12345");
//删除的时候是包含头,不包含尾
sb2.delete(3, 4);
System.out.println("--delete--"+sb2.toString());
//清空缓冲区:
sb2.delete(0, sb2.length());
System.out.println("--1.清空缓冲区后--"+sb2.length());
//不要用这种方式清空缓冲区,原来的会变成垃圾,浪费内存
sb2 = new StringBuffer();
System.out.println("--2.清空缓冲区后--"+sb2.length());
}
打印结果是: --deleteCharAt--acde --delete--1235
13.05_常见对象(StringBuffer的替换和反转功能)
- A:StringBuffer的替换功能
- public StringBuffer replace(int start,int end,String str):
- 从start开始到end用str替换
- public StringBuffer replace(int start,int end,String str):
- B:StringBuffer的反转功能
- public StringBuffer reverse():
- 字符串反转
- public StringBuffer reverse():
- C:案例展示
- 字符串替换和反转
@Test
public void testReplace_Reverse(){
StringBuffer sb1 = new StringBuffer("abcde");
sb1.replace(1, 3, "gggggg");
System.out.println("--replace--"+sb1.toString());
StringBuffer sb2 = new StringBuffer("12345");
System.out.println("--reverse--"+sb2.reverse());
}
打印结果是: --replace--aggggggde --reverse--54321
13.06_常见对象(StringBuffer的截取功能及注意事项)
- A:StringBuffer的截取功能
- public String substring(int start):
- 从指定位置截取到末尾
- public String substring(int start,int end):
- 截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
- public String substring(int start):
- B:注意事项
- 注意:返回值类型不再是StringBuffer本身
- C: 案例展示:
@Test
public void testSubstr(){
StringBuffer sb1 = new StringBuffer("abcde");
System.out.println("---substring(index)--"+sb1.substring(3));
StringBuffer sb2 = new StringBuffer("abcde");
System.out.println("--substring(int start, int end)--"+sb2.substring(2, 3));
}
打印结果是: ---substring(index)--de --substring(int start, int end)--c
13.07_常见对象(StringBuffer和String的相互转换)
-
A:String -- StringBuffer
- a:通过构造方法
- b:通过append()方法
-
B:StringBuffer -- String
- a:通过构造方法
- b:通过toString()方法
- c:通过subString(0,length);
-
C:案例展示:
@Test
public void testString2StringBuffer(){
StringBuffer sb1 = new StringBuffer("hello world");
System.out.println("--String调用构造方法转StringBuffer--"+sb1);
StringBuffer sb2 = new StringBuffer();
sb2.append("abcde");
System.out.println("--String调用append方法转StringBuffer--"+sb2);
}
//打印结果如下:
--String调用构造方法转StringBuffer--hello world
--String调用append方法转StringBuffer--abcde
@Test
public void stringBuffer2String(){
StringBuffer sb = new StringBuffer();
String str1 = new String(sb);
System.out.println("--StringBuffer调用构造方法转String--"+str1);
String str2 = sb.toString();
System.out.println("--StringBuffer调用toString方法转String--"+str2);
String str3 = sb.substring(0, sb.length());
System.out.println("--StringBuffer调用substring方法转String---"+str3);
}
//打印结果如下:
--StringBuffer调用构造方法转String--
--StringBuffer调用toString方法转String--
--StringBuffer调用substring方法转String---
13.08_常见对象(把数组转成字符串)
-
A:案例演示
- 需求:把数组中的数据按照指定个格式拼接成一个字符串
-
举例: int[] arr = {1,2,3,4}; 输出结果: "[1, 2, 3,4]" 用StringBuffer的功能实现
@Test
public void testArray2String(){int [] array = {1,2,3,4}; System.out.println(array2String(array));}
private static String array2String(int [] array){
StringBuffer sb = new StringBuffer(); sb.append("["); for(int i = 0;i<array.length;i++){ if(i == array.length-1){ sb.append(array[i]).append("]"); }else{ sb.append(array[i]).append(", "); } } return sb.toString();}
用StringBuffer的功能实现
@Test
public void testStringReverse(){
System.out.println("请输入字符串");
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
System.out.println("您输入的字符串是:"+str);
StringBuffer sb = new StringBuffer(str);
System.out.println("字符串反转后是:"+sb.reverse());
}
打印结果如下: 请输入字符串 abcdefg 您输入的字符串是:abcdefg 字符串反转后是:gfedcba
13.10_常见对象(StringBuffer和StringBuilder的区别)
-
A:StringBuilder的概述
- 通过查看API了解一下StringBuilder类
一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
-
B:面试题
-
String,StringBuffer,StringBuilder的区别
-
StringBuffer和StringBuilder的区别
-
StringBuffer是jdk1.0版本的,是线程安全的,效率低
-
StringBuilder是jdk1.5版本的,是线程不安全的,效率高
-
String和StringBuffer,StringBuilder的区别
-
String是一个不可变的字符序列
-
StringBuffer,StringBuilder是可变的字符序列
-
13.11_常见对象(String和StringBuffer分别作为参数传递)
- A:形式参数问题
- String作为参数传递
- StringBuffer作为参数传递
- B:案例演示
- String和StringBuffer分别作为参数传递问题
@Test
public void testStrAsParams(){
String s = "hello world";
change(s);
System.out.println(s);
System.out.println("-------------------");
StringBuffer sb = new StringBuffer("ha ha");
change(sb);
System.out.println(sb);
}
private static void change(String str){
str += "123er";
}
private static void change(StringBuffer sb){
sb.append("123we");
}
浙公网安备 33010602011771号