String若想频繁的修改其内容时 性能不好
    由此衍生出了 StringBuilder 与 StringBuffer
    StringBuffer 是同步的 数据安全 效率低
    StringBuilder 是不同步的 数据不安全 效率高

    StringBuilder
    1.java.lang包 无需导包

    2.继承AbstractStringBuilder 间接继承Object 实现三个接口Serializable CharSequence Appendable
    相比较于String实现的接口 StringBuilder与StringBuffer将Comparable接口替换成了Appendable接口
    所以StringBuilder与StringBuffer没有compareTo方法
    但是多了一个String没有的方法 append(); 方法

    3.特性
    可变字符串 private char[] value; 可以动态扩容

    4.对象的构建
    StringBuilder builder = new StringBuilder();
    //无参数构造方法 构建默认长度为16空间的对象 char[]

    StringBuilder builder1 = new StringBuilder(20);
    //带int参数构造方法 构建自定义长度空间的对象 char[]
    StringBuilder builder2 = new StringBuilder(“abc”);//此时数组长度为19
    //带String参数构造方法 构建字符串长度+16个空间的对象 char[]

    5.常用的方法
    与String类不同的方法
    append(); insert(); delete(); deleteCharAt(); reverse();
    与String类相同的方法 名字相同 用法不一致
    length(); charAt(); codePointAt(); indexOf(); lastIndexOf();
    substring(); replace();
    不常用的方法
    ensureCapacity(); capacity(); setLength(); trimToSize(); setCharAt();

    5.1 append();
    //在字符串的后面插入元素 参数给什么都可以 int char boolean 等等
    //最主要的方法 String中没有这个方法 不用接收也能生效
    //频繁的拼接字符串时可以使用这个方法 能显著的提高效率

    5.2 capacity();
    //返回数组的容量
    length();
    //返回数组长度 即有效元素个数

    StringBuilder builder = new StringBuilder(“abcdefg”);
    System.out.println(builder.capacity());//即23
    System.out.println(builder.length()); //即7

    5.3 String = substring(int start[,int end]);

    StringBuilder builder = new StringBuilder(“abcdefg”);
    String value = builder.substring(2,5);//返回 cde
    //返回值要用String类型的来接收 不接收看不到效果

    5.4 delete(int start[,int end]);
    //StringBuilder类中独有的方法
    //将start到end之间的字符删掉 不用接收也能看到效果

    StringBuilder builder = new StringBuilder(“abcdefg”);
    builder.delete(3,5);//输出 abcfg

    5.5 StringBuilder = deleteCharAt(int index);
    //StringBuilder类中独有的方法
    //将index位置的元素删除

    StringBuilder builder = new StringBuilder(“abcdefg”);
    builder.deleteCharAt(3);//输出 abcefg

    5.6 StringBuilder= setCharAt(int index,char value);
    //StringBuilder类中独有的方法
    //将index位置的字符改成给定的value

    StringBuilder builder = new StringBuilder(“abcde”);
    builder.setCharAt(2,’a’);//输出 abade

    5.7 ensureCapacity();
    //确保数组容量够用

    5.8 int = indexOf(String str[,int fromIndex]);
    //找寻从指定位置往后str字符第一次出现的索引位置
    int = lastIndexOf(String str[,int fromIndex]);
    //找寻从指定位置向前找str字符第一次出现的索引位置

    StringBuilder builder = new StringBuilder(“abcadefgab”);
    int index = builder.indexOf(“a”,4);//输出 8
    int index1 = builder.lastIndexOf(“a”,6);//输出 3

    5.9 insert();
    //往指定位置插入元素 插入什么都可以 String中没有这个方法

    StringBuilder builder = new StringBuilder(“abcde”);
    builder.insert(3,3);//输出 abc3de
    builder.insert(3,”java”);//输出 abcjava3de

    5.10 replace(int start,int end,String str);
    //将 strat到end之间 的字符串替换成 指定的字符串

    StringBuilder builder = new StringBuilder(“abcde”);
    builder.replace(2,4,”java”);//输出 abjavae

    5.11 reverse();
    //将字符串反转

    5.12 setLength();
    //设置字符串有效元素的个数
    //这个方法可能会不安全 通常不用

    5.13 toString();
    //重写了
    //将 StringBuilder对象 转换成 String对象

    5.14 trimToSize();
    //将数组中无用的容量去掉 变成length长度的容量

    StringBuilder builder = new StringBuilder(“abc”);//此时数组长度为19
    System.out.println(builder.length());//有效 3
    System.out.println(builder.capacity());//容量 19
    builder.trimToSize();
    System.out.println(builder.length());//有效 3
    System.out.println(builder.capacity());//容量 3
    builder.setLength(5);//有效元素被人为修改为 5
    builder.trimToSize();
    System.out.println(builder.length());//有效 5
    System.out.println(builder.capacity());//容量 5