String、StringBuilder、StringBuffer、StringJoiner类的常用方法,以及区别

前言:
作者简介:我是阿柽,一名热爱技术的在校学生。
系列专栏:JAVA专栏
如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步
如果感觉博主的文章还不错的话,点赞 + 关注 + 收藏 


目录

一、String类的常用方法

1、String类概述

2、String创建对象

 3、String类的常用方法

 4、String的注意事项

二、StringBuilder、StringBuffer

三、StringJoiner

总结


一、String类的常用方法

1、String类概述

我们学习String这个类,也就是学对字符串进行处理。为什么要学习字符串处理呢?因为在开发中对于字符串的处理还是非常常见的。

 比如:在用户登录时,用户输入的用户名和密码送到后台,需要和正确的用户名和密码进行校验,这就需要用到String类提供的比较功能。

String、StringBuilder、StringBuffer、StringJoiner类的常用方法,以及区别_第1张图片

 再比如:同学们在直播留言时,有些小伙伴可能不太文明说了一些脏话,后台检测到你输入的是脏话,就会用`***`把脏话屏蔽掉。这也需要用到String类提供的替换功能。

String、StringBuilder、StringBuffer、StringJoiner类的常用方法,以及区别_第2张图片

Java为了方便我们处理字符串,所以给我们提供了一个String类来代表字符串,这个类就是java.lang包下。

按照面向对象的编程思想,对于字符串的操作,只需要创建字符串对象,用字符串对象封装字符串数据,然后调用String类的方法就可以了。

2、String创建对象

接下来我们打开String类的API,看一下String类的对象如何创建。如下图所示

String、StringBuilder、StringBuffer、StringJoiner类的常用方法,以及区别_第3张图片

意思就是:所有Java的字符串字面值,都是字符串对象。

所以创建String对象的第一种方式就有了

String s1 = "abc"; //这里"abc"就是一个字符串对象,用s1变量接收

String s2 = "哈喽,java"; //这里的“黑马程序员”也是一个字符串对象,用s2变量接收

创建String对象还有第二种方式,就是利用String类的构造方法创建String类的对象。

String、StringBuilder、StringBuffer、StringJoiner类的常用方法,以及区别_第4张图片

 执行构造方法需要用到new关键字。`new String(参数)`就是在执行String类的构造方法。 

下面我们演示通过String类的构造方法,创建String类的对象

// 1、直接双引号得到字符串对象,封装字符串数据
String name = "JAVA666";
System.out.println(name);

// 2、new String创建字符串对象,并调用构造器初始化字符串
String rs1 = new String();
System.out.println(rs1); // ""

String rs2 = new String("itheima");
System.out.println(rs2);

char[] chars = {'a', 'b', 'c'};
String rs3 = new String(chars);
System.out.println(rs3);

byte[] bytes = {97, 98, 99};
String rs4 = new String(bytes);
System.out.println(rs4);

 3、String类的常用方法

API真正的作用是来解决业务需求的,如果不解决业务需求,只是记API是很难记住的。

 String、StringBuilder、StringBuffer、StringJoiner类的常用方法,以及区别_第5张图片

 所以API的正确打开方式是,先找到这个类,把这个类中的方法先用代码快速过一遍,有一个大概印象就行。然后再具体的案例中,选择你需要的方法来用就行。

public class StringDemo {
    public static void main(String[] args) {
        //目标:快速熟悉String提供的处理字符串的常用方法。
        String s = "Java";
        // 1、获取字符串的长度
        System.out.println(s.length());

        // 2、提取字符串中某个索引位置处的字符
        char c = s.charAt(1);
        System.out.println(c);

        // 字符串的遍历
        for (int i = 0; i < s.length(); i++) {
            // i = 0 1 2 3 4 5
            char ch = s.charAt(i);
            System.out.println(ch);
        }

        System.out.println("-------------------");

        // 3、把字符串转换成字符数组,再进行遍历
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            System.out.println(chars[i]);
        }

        // 4、判断字符串内容,内容一样就返回true
        String s1 = new String("哈喽");
        String s2 = new String("哈喽");
        System.out.println(s1 == s2); // false
        System.out.println(s1.equals(s2)); // true

        // 5、忽略大小写比较字符串内容
        String c1 = "34AeFG";
        String c2 = "34aEfg";
        System.out.println(c1.equals(c2)); // false
        System.out.println(c1.equalsIgnoreCase(c2)); // true

        // 6、截取字符串内容 (包前不包后的)
        String s3 = "Java是最好的编程语言之一";
        String rs = s3.substring(0, 8);
        System.out.println(rs);

        // 7、从当前索引位置一直截取到字符串的末尾
        String rs2 = s3.substring(5);
        System.out.println(rs2);

        // 8、把字符串中的某个内容替换成新内容,并返回新的字符串对象给我们
        String info = "这个电影简直是个垃圾,垃圾电影!!";
        String rs3 = info.replace("垃圾", "**");
        System.out.println(rs3);

        // 9、判断字符串中是否包含某个关键字
        String info2 = "Java是最好的编程语言之一,我爱Java,Java不爱我!";
        System.out.println(info2.contains("Java"));
        System.out.println(info2.contains("java"));
        System.out.println(info2.contains("Java2"));

        // 10、判断字符串是否以某个字符串开头。
        String rs4 = "张三丰";
        System.out.println(rs4.startsWith("张"));
        System.out.println(rs4.startsWith("张三"));
        System.out.println(rs4.startsWith("张三2"));

        // 11、把字符串按照某个指定内容分割成多个字符串,放到一个字符串数组中返回给我们
        String rs5 = "张无忌,周芷若,殷素素,赵敏";
        String[] names = rs5.split(",");
        for (int i = 0; i < names.length; i++) {
            System.out.println(names[i]);
        }
    }
}

 4、String的注意事项

我们学习了字符串的一些常用方法,在实际工作中用这些方法解决字符串的常见问题是完全足够的,但是在面试时可能会问一些原理性的东西。

**注意事项1:String类的对象是不可变的对象**

我们先看一段代码,分析这段代码的结果

    public static void main(String[] args) {
        String name = "哈喽";
        name += "世界";
        name += "爱你";
        System.out.println(name);
    }

String、StringBuilder、StringBuffer、StringJoiner类的常用方法,以及区别_第6张图片

 以上代码中,先定义了一个String变量 name第一次赋值为`“哈喽”;` 然后对`name`变量记录的字符串进行两次拼接,第一次拼接`“世界”`,第二次拼接`“爱你”`;我们发现得到的结果是:`哈喽世界爱你`

 这里问题就来了,你不是是说:**String类的对象是不可变的字符串对象吗?

下面我们就解释一下,String是不可变对象到底是什么含义。

需要注意的是:只要是以“”方式写出的字符串对象,会在堆内存中的字符串常量池中存储。

执行第一句话时,会在堆内存的常量池中,创建一个字符串对象“哈喽”,然后把“哈喽”的地址赋值给String name

 String、StringBuilder、StringBuffer、StringJoiner类的常用方法,以及区别_第7张图片

 **注意事项2:字符串字面量和new出来字符串的区别**

(1)只要是以`“...”`方式写出的字符串对象,会存储到字符串常量池,且相同内容的字符串只存储一份。如下图所示

String、StringBuilder、StringBuffer、StringJoiner类的常用方法,以及区别_第8张图片

 (2)但通过`new`方式创建字符串对象,每new一次都会产生一个新的对象放在堆内存中。如下图所示

String、StringBuilder、StringBuffer、StringJoiner类的常用方法,以及区别_第9张图片

 总结一下,字符串的注意事项。

        1. String是不可变字符串对象
        2. 只要是以“...”方式写出的字符串对象,会存储到字符串常量池,且相同内容的字符串只存储一份;
        3. 但通过new方式创建字符串对象,每new一次都会产生一个新的对象放在堆内存中。

二、StringBuilder、StringBuffer

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

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

 

 String、StringBuilder、StringBuffer、StringJoiner类的常用方法,以及区别_第10张图片

 接下来我们用代码演示一下StringBuilder的用法

public class Test{
    public static void main(String[] args){
        StringBuilder sb = new StringBuilder("itehima");
        
        //1.拼接内容
        sb.append(12);
        sb.append("哈喽");
        sb.append(true);
        
        //2.append方法,支持临时编程
        sb.append(666).append("哈喽2").append(666);
        System.out.println(sb); //打印:12哈喽666哈喽2666
        
        //3.反转操作
        sb.reverse();
        System.out.println(sb); //打印:6662喽哈666喽哈21
        
        //4.返回字符串的长度
        System.out.println(sb.length());
        
        //5.StringBuilder还可以转换为字符串
        String s = sb.toString();
        System.out.println(s); //打印:6662喽哈666喽哈21
    }
}

为啥操作字符串建议使用StringBuilder,而不用原来学过的String?

String、StringBuilder、StringBuffer、StringJoiner类的常用方法,以及区别_第11张图片

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

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

StringBufferStringBuilder

注意:StringBuffer的用法与StringBuilder是一模一样的 StringBuilder是线程不安全的  StringBuffer是线程安全的

三、StringJoiner

接下来,我们学习一个类叫做StringJoiner,学习这个类干嘛用呢?是因为我们前面使用StringBuilder拼接字符串的时,代码写起来还是有一点麻烦,而StringJoiner号称是拼接神器,不仅效率高,而且代码简洁。

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

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

 

String、StringBuilder、StringBuffer、StringJoiner类的常用方法,以及区别_第12张图片

 下面演示一下StringJoiner的基本使用

public class Test{
    public static void main(String[] args){
        StringJoiner s = new StringJoiner(",");
        s.add("java1");
        s.add("java2");
        s.add("java3");
        System.out.println(s); //结果为: java1,java2,java3
        
        //参数1:间隔符
        //参数2:开头
        //参数3:结尾
        StringJoiner s1 = new StringJoiner(",","[","]");
        s1.add("java1");
        s1.add("java2");
        s1.add("java3");
        System.out.println(s1); //结果为: [java1,java2,java3]
    }

总结

以上就是今天要分享的内容,本文仅仅详细介绍了String类常用API的使用。

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