StringBuilder的基本使用

概述

StringBuilder表面看起来是用来拼接、处理字符串的一个工具类,但它的内部实现其实是处理字符序列。

StringBuilder与StringBuffer
StringBuilder与StringBuffer具有相同的功能。
StringBuffer支持了线程安全(同步访问)。
下文仅以StringBuilder举例。

拼接、反序、替换、删减、插入

void append(XXX xxx)

拼接,可接收大部分基本数据类型、String、char[]等等,甚至能接收StringBuilder。

    StringBuilder sb = new StringBuilder();
    sb.append(8).append("乘以").append(6.6).append('=').append(true);
    sb.append(new StringBuilder("!!!"));
    System.out.println(sb); // 输出结果为:8乘以6.6=true!!!
void reverse()

反转顺序。

    StringBuilder sb = new StringBuilder("猪头大一来过上海");
    sb.reverse();
    System.out.println(sb); // 输出结果为:海上过来一大头猪
void replace(int start, int end, String str)

根据索引把某部分替换成其它的。

    StringBuilder sb = new StringBuilder("春眠不觉晓,处处闻啼鸟。");
    sb.replace(8, 11, "蚊子咬");
    System.out.println(sb); // 输出结果为:春眠不觉晓,处处蚊子咬。
void delete(int start, int end)

根据索引删减某部分。

    StringBuilder sb = new StringBuilder("爸爸的脸蛋有很多褶皱");
    sb.delete(3, 4);
    System.out.println(sb); // 输出结果为:爸爸的蛋有很多褶皱
void insert(int offset, XXX xxx)

在索引位置插入一段。

    StringBuilder sb = new StringBuilder("《摔跤吧!爸爸》");
    sb.insert(3, "了");
    System.out.println(sb); // 输出结果为:《摔跤了吧!爸爸》

容量和长度

new StringBuilder(int capacity)

StringBuilder默认的初始容量是16,可用带参构造器来自定义初始容量。
当字符个数达到了当前容量,则容量会自动提升,容量提升的规律为:新容量 = 旧容量 * 2 + 2。

int capacity()

返回当前字符序列的容量。

int length()

返回当前已存储的字符的个数。

    StringBuilder sb = new StringBuilder(6);
    sb.append("执子之手,方知子丑。");
    System.out.println(sb.capacity()); // 转出结果为:26
    System.out.println(sb.length()); // 转出结果为:10
获取内容

char charAt(int index),根据索引,得到相应字符。
String substring(int start),根据索引,以字符串形式截取尾部段。
String substring(int start, int end),根据索引,以字符串形式截取内部段。
String toString(),以字符串形式输出整段。

返回匹配对应的索引

int indexOf(String str),输出第一个匹配的索引。
int indexOf(String str, int fromIndex),从指定的索引处开始,输出第一个匹配的索引。
int lastIndexOf(String str),输出最后一个匹配的索引。
int lastIndexOf(String str, int fromIndex),从指定的索引处开始,输出最后一个匹配的索引。

/**
 * 关于StringBuffer和StringBuilder的使用
 *
 * 单线程问题使用StringBuilder   效率高
 * 多线程用Buffer   效率低
 *
 * String sb2 = new StringBuffer("abc")    --------->数组长度是3         最开始容量是16
 * 如果底层容量不足的话  自动扩容  默认情况下扩容为原来的(两倍+2) 同时将原油数组中的元素复制到新的数组中。
 *
 *      指导意义:在开发中  建议使用StringBuffer(int capacity) 或者StringBuilder    看看涉不涉及线程安全问题
 *
 *      总结:
 *      增:append();
 *      删:delete();
 *      改:replace();
 *      查:charAt();
 *      插:insert();
 *      长度:length();
 *      遍历:for()+ charAt();/toString();
 *
 *
 *
 *
 *
 * @author shkstart
 * @create 2022/11/21-8:44
 */
public class StringBufferBuilderTest {
    @Test
    public void test1(){
        StringBuffer s1 = new StringBuffer("acsds");
        s1.append(1);
        System.out.println(s1);
        s1.append('1');
        System.out.println(s1);
        s1.delete(1,3); // 左闭右开
        System.out.println(s1);
        s1.replace(1,3,"good");//将指定位置的数组替换成新的数组
        s1.insert(1,"nice");//在指定位置插入数据
        System.out.println(s1);
        s1.reverse();
        System.out.println(s1);//把当前字符反转


    }



    public static void main(String[] args) {

        StringBuffer s = new StringBuffer("abc");
        s.setCharAt(2,'x');
        System.out.println(s);
    }
}

你可能感兴趣的:(java,算法,开发语言)