java常用API-String、StringBuilder、StringBuffer

java常用API-String、StringBuilder、StringBuffer

StringBuilder

StringBuilder代表可变字符串对象,相当于是一个容器,它里面装的字符串是可以改变的,就是用来操作字符串的

好处: StringBuilder比String更适合做字符串的修改操作,效率会更高,代码也会更简洁。

构造方法:

构造器 说明
public StringBuilder() 创建一个空白的可变的字符串对象,不包含任何内容
public StringBuilder(String str) 创建一个指定字符串内容的可变字符串对象

常用方法:

append:在字符串末尾添加内容(可以是任意类型) insert:在指定位置插入内容 delete:删除指定位置的字符 deleteCharAt:删除指定位置的字符 replace:替换指定位置的字符 substring:截取子串 indexOf:查找指定字符串位置 lastIndexOf:查找最后一次出现的指定字符串位置 length:获取当前字符串长度 setLength:设置字符串长度

toString : 可以把StringBuilder转换为String

reverse:反转字符串

常用方法的基本使用:

scss 复制代码
public class StringDemo {
    public static void main(String[] args) {
        //StringBuilder
        StringBuilder strbu=new StringBuilder("你好");
        System.out.println(strbu);
        //增
        strbu.append("java修炼手册").append(19).append(90);
        System.out.println(strbu);  //你好java修炼手册1990
        System.out.println(strbu.reverse()); //反转字符串
        //0991册手炼修avaj好你
​
        //删除
        strbu.delete(1,2); // 删除序号1-2的字符串,但是不包括2
        System.out.println(strbu); //091册手炼修avaj好你
​
        // 改 replace
        strbu.replace(0,1,"2020");
        System.out.println(strbu); //202091册手炼修avaj好你
​
        //获取长度
        System.out.println(strbu.length());//16
​
        //转换为一个字符串
        String s = strbu.toString();
        System.out.println(s);//202091册手炼修avaj好你
​
        //插入insert
        strbu.insert(0,88); //插入位置,插入的数据
        System.out.println(strbu);//88202091册手炼修avaj好你
​
        //查找indexOf
        System.out.println(strbu.indexOf("手")); //9
    }
}

为啥要用StringBuilder?

对于字符串相关的操作,如频繁的拼接、修改等,建议用StringBuidler,效率更高!

注意: 如果操作字符串较少,或者不需要操作,以及定义字符串变量,还是建议用String。

ini 复制代码
  StringBuilder sb=new StringBuilder();
        for (int i = 0; i < 100000; i++) { //运行速度比以往的String的速度快很多倍
            sb.append(i);
        }
        System.out.println(sb);

StringBuffer

注意:

  • StringBuffer的用法与StringBuilder是一模一样的
  • 但stringBuilder是线程不安全的,StringBuffer是线程安全的

案例:返回任意整型数组的内容

typescript 复制代码
public class StringDemo {
    public static void main(String[] args) {   
        //返回任意整形数组的内容
        int[] arr={23,54,675,7,5,2,4,6,432};
        String arrayData = getArrayData(arr);
        System.out.println(arrayData);//[23,54,675,7,5,2,4,6,432]
    }
​
public static String getArrayData(int[] arr){
    if(arr==null){
        return null;
    }
    StringBuffer stringBuffer=new StringBuffer();
    stringBuffer.append('[');
    for (int i = 0; i <arr.length ; i++) {
        if(i==arr.length-1){
            //增加判断如果是最后一个元素了就不要添加逗号了
            stringBuffer.append(arr[i]);
            break;
        }
        stringBuffer.append(arr[i]).append(','); //就这样会多一个逗号
​
    }
    stringBuffer.append(']');
    return stringBuffer.toString();
​
}
}

StringJoiner

可以实现高效快捷的拼接

JDK8开始才有的,跟StringBuilder一样,也是用来操作字符串的, 也可以看成是一个容器,创建之后里面的内容是可变的

好处:不仅能提高字符串的操作效率,并且在有些场景下使用它操作字符串,代码会更简洁

构造器 说明
public stringJoiner(间隔符号) 创建一个stringJoiner对象,指定拼接时的间隔符号
public StringJoiner(间隔符号,开始符号,结束符号) 创建一个stringJoiner对象,指定拼接时的间隔符号、开始符号、结束符号

常用方法:

方法名称 说明
public stringJoiner add(添如的内容) 添加数据,并返回对象本身
public int length() 返回长度(字符出现的个数)
public string tostring() 返回一个字符串(该字符串就是拼接之后的结果)

用StringJoiner实现返回任意整型数组的内容:

csharp 复制代码
 public static String getStringJoiner(int[] arr){
        if(arr==null){
            return null;
        }
        //创建对象,分别指定分隔符,开始符号,结束符号
        StringJoiner strjoin=new StringJoiner(",","[","]");
        for (int i = 0; i <arr.length ; i++) {
            //里面不可以直接放一个数字啥的,只可以放CharSequence 字符序列
//            strjoin.add(arr[i])
           strjoin.add(String.valueOf(arr[i]));
        }
        return strjoin.toString();
    }

相比较前面的StringBuffer 实现的代码更加简洁,并且运算速度更快一些

需要注意:StringJoiner 在add的时候里面需要放入CharSequence 字符序列,是数字啥的都是不可以的

CharSequence类

CharSequence类是java.lang包下的一个接口,此接口对多种不同的对char访问的统一接口,像String、StringBuffer、StringBuilder类都是CharSequence的子接口;

CharSequence类和String类都可以定义字符串,但是String定义的字符串只能读,CharSequence定义的字符串是可读可写的

String、String StringBuffer 和 StringBuilder 的区别是什么?

String是只读字符串 ,它并不是基本数据类型,而是一个对象。从底层源码来看是一个final类型的字符数组,所引用的字符串不能被改变,一经定义,无法再增删改。每次对String的操作都会生成新的String对象。

arduino 复制代码
private final char value[];

每次+操作 : 隐式在堆上new了一个跟原字符串相同的StringBuilder对象,再调用append方法 拼接+后面的字符。

StringBuffer和StringBuilder 他们两都继承了AbstractStringBuilder抽象类,从

AbstractStringBuilder抽象类中我们可以看到

scss 复制代码
/**
* The value is used for character storage.
*/
char[] value;

他们的底层都是可变的字符数组,所以在进行频繁的字符串操作时,建议使用StringBuffer和

StringBuilder来进行操作。 另外StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所

以是线程安全 的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。

StringBuffer对方法都添加了同步锁

java 复制代码
@Override
    public synchronized int length() {
        return count;
    }
相关推荐
程序猿麦小七几秒前
基于springboot的景区网页设计与实现
java·spring boot·后端·旅游·景区
weisian1517 分钟前
认证鉴权框架SpringSecurity-2--重点组件和过滤器链篇
java·安全
蓝田~9 分钟前
SpringBoot-自定义注解,拦截器
java·spring boot·后端
.生产的驴11 分钟前
SpringCloud Gateway网关路由配置 接口统一 登录验证 权限校验 路由属性
java·spring boot·后端·spring·spring cloud·gateway·rabbitmq
v'sir25 分钟前
POI word转pdf乱码问题处理
java·spring boot·后端·pdf·word
提高记忆力33 分钟前
SpringBoot整合FreeMarker生成word表格文件
java·spring
JDS_DIJ34 分钟前
RabbitMQ
java·rabbitmq·java-rabbitmq
XiaoLeisj1 小时前
【JavaEE初阶 — 多线程】生产消费模型 & 阻塞队列
java·开发语言·java-ee
hxj..1 小时前
【设计模式】外观模式
java·设计模式·外观模式
冰逸.itbignyi1 小时前
SpringBoot之AOP 的使用
java·spring boot