基本概念
解决字符串是个常量不可改变,重新申请存储浪费内存空间
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+5System.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+5System.out.println(sb3.length());//5System.out.println("---------------");//4.实现增删改查//4.1插入和追加//返回调用自己的引用,也就是返回值和调用对象是同一个对象StringBuilder sb4 = sb3.insert(0, "abcd");System.out.println("sb4="+sb4);//abcdhelloSystem.out.println("sb3="+sb3);//abcdhelloSystem.out.println(sb3.insert(4, "1234"));//abcd1234helloSystem.out.println(sb4.insert(sb3.length(), "ABCD"));//abcd1234helloABCDSystem.out.println(sb3.append("world"));//abcd1234helloABCDworld//当字符串长度尝过了字符串对象的初始容量时,该字符串会自动扩容,默认扩容算法是:原始容量*2+2//底层采用byte数组来存放所有的字符System.out.println(sb3.capacity());//44System.out.println(sb3.length());//22System.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}}
