基本概念
解决字符串是个常量不可改变,重新申请存储浪费内存空间
java.lang.StringBuffer java.lang.StringBuilder
1.0开始 线程安全效率低 1.5开始 非线程安全效率高
StringBuilder类常用的构造方法
StringBuilder() | 使用无参方式构造对象,容量为16 |
---|---|
StringBuilder(int capacity) | 根据参数指定的容量来构造对象,容量为参数指定大小 |
StringBuilder(String str) | 根据参数指定的字符串来构造对象,容量为:16+字符串长度 |
public class StringBuilderTest {
public static void main(String[] args) {
//1.使用无参方式构造StringBuilder类型的对象并打印容量和长度
StringBuilder sb1=new StringBuilder();
System.out.println("sb1="+sb1);
System.out.println(sb1.capacity());
System.out.println(sb1.length());
System.out.println("---------------");
StringBuilder sb2 = new StringBuilder(20);
System.out.println("sb1="+sb2);
System.out.println(sb2.capacity());
System.out.println(sb2.length());
System.out.println("---------------");
//根据参数指定的字符串内容来构造对象并打印容量和长度
StringBuilder sb3 = new StringBuilder("hello");
System.out.println("sb1="+sb3);
System.out.println(sb3.capacity());//16+5
System.out.println(sb3.length());//5
}
}
StringBuilder类常用的成员方法
int capacity() | 用于返回调用对象的容量 |
---|---|
int length() | 用于返回字符串的长度,也就是字符的个数 |
StringBuilder insert(int offset, String str) |
插入字符串并返回调用对象的引用,就是自己。 |
StringBuilder append(String str) | 追加字符串 |
StringBuilder deleteCharAt(int index) | 将当前字符串中下标为index位置的单个字符删除 |
StringBuilder delete(int start,int end) | 删除字符串 |
StringBuilder replace(int start,int end, String str) |
替换字符串 |
StringBuilder reverse() | 字符串反转 |
public class StringBuilderTest {
public static void main(String[] args) {
//1.使用无参方式构造StringBuilder类型的对象并打印容量和长度
StringBuilder sb1=new StringBuilder();
System.out.println("sb1="+sb1);
System.out.println(sb1.capacity());
System.out.println(sb1.length());
System.out.println("---------------");
StringBuilder sb2 = new StringBuilder(20);
System.out.println("sb1="+sb2);
System.out.println(sb2.capacity());
System.out.println(sb2.length());
System.out.println("---------------");
//根据参数指定的字符串内容来构造对象并打印容量和长度
StringBuilder sb3 = new StringBuilder("hello");
System.out.println("sb1="+sb3);
System.out.println(sb3.capacity());//16+5
System.out.println(sb3.length());//5
System.out.println("---------------");
//4.实现增删改查
//4.1插入和追加
//返回调用自己的引用,也就是返回值和调用对象是同一个对象
StringBuilder sb4 = sb3.insert(0, "abcd");
System.out.println("sb4="+sb4);//abcdhello
System.out.println("sb3="+sb3);//abcdhello
System.out.println(sb3.insert(4, "1234"));//abcd1234hello
System.out.println(sb4.insert(sb3.length(), "ABCD"));//abcd1234helloABCD
System.out.println(sb3.append("world"));//abcd1234helloABCDworld
//当字符串长度尝过了字符串对象的初始容量时,该字符串会自动扩容,默认扩容算法是:原始容量*2+2
//底层采用byte数组来存放所有的字符
System.out.println(sb3.capacity());//44
System.out.println(sb3.length());//22
System.out.println("---------------");
//5.删除
sb3.deleteCharAt(8);//表示删除下标为8的字符
System.out.println("sb3="+sb3);
//使用for循环删除多个字符
for (int i=8; i<12;i++){
// sb3.deleteCharAt(i);//abcd1234loBDworld
//由结果可知,删除一个字符后就跳过一个字符继续删除,因为每当删除一个字符后后面的字符会向前部位,因此下标会发生变化
sb3.deleteCharAt(8);
}
System.out.println("删除结果为:"+sb3);
System.out.println("------------------------------");
sb3.delete(0,4);
System.out.println("sb3="+sb3);
sb3.delete(4,8);
System.out.println("sb3="+sb3);
sb3.delete(4,sb3.length());
System.out.println("sb3="+sb3);
//修改 查找 翻转操作
System.out.println("------------------------------");
sb3.setCharAt(0,'a');
System.out.println("修改单个字符的内容是:"+sb3);
//修改"234"为"bcd"
sb3.replace(1,4,"bcd");
System.out.println("修改字符串后的内容是:"+sb3);
//实现查找的功能
int pos = sb3.indexOf("b");
System.out.println("从先往后查找的内容是:"+pos);
pos=sb3.lastIndexOf("b");
System.out.println("从后往前查找的内容是:"+pos);
//翻转
sb3.reverse();
System.out.println("反转后的内容是:"+sb3);
//7.笔试考点
//考点一:既然StringBuilder类的对象本身可以修改,那么为什么成员方法还有返回值么?
//解析:为了连续调用
// sb3.reverse().append("1").append("0").insert(0,"3").delete(0,1).reverse();
// System.out.println(sb3);
//考点二:如何实现StringBuilder类型和String类型之间的转换?
//String str3=sb3.toString();
//StringBuilder str5=new StringBuilder(str3);
//考点三: String StringBuilder StringBuffer 之间效率最高? 如何排列?
//String<StringBuffer<StringBuilder
}
}