java基础学习总结(八):String类

前言

学习任何一个类的时候,先要阅读这个类的帮助文档的说明:理解当前这个类或接口到底是干什么的。然后查看它的构造函数,看能不能创建对象。然后去查看API,看下这个类下面有哪些方法,每个方法都有什么作用,当自己在开发中遇到某种需求后,看看这个类中的有没有提供解决问题的方法,如果有直接创建对象,使用这个方法来解决问题即可。

String类

  • 字符串常量,它在Java中不属于基本数据类型, 而是引用类型,也称为类类型。Java中使用String这个类描述字符串这种常量数据。
  • 字符串常量,它属于对象,但是它不是存储在堆空间中,而是存储在方法区中的字符串常量池中。字符串常量池中保存的就是所有的字符串数据。只要我们书写了双引号,不管双引号中间是什么数据,这些数据都会立刻在字符串常量池中保存。并且一直存在,不会被改变。
    在这里插入图片描述

String类的构造方法

使用双引号本身就可以得到一个字符串对象,String类提供了大量的构造函数,目的是可以帮助我们将其他的数据变成字符串对象,只要使用String类的构造函数创建的对象,那么这个对象就会在堆中出现,而在创建出的字符串对象中的字符数据保存在常量池中。

  • 字节数组中的数据变成字符串
    在这里插入图片描述
public class demo1 {
    public static void main(String[] args) {
        byte[] bytes = {65,66,97,98};
        String s = new String(bytes);
        // 参数1:字节数组,参数2:索引起始位置,参数3:取几个
        String s1 = new String(bytes, 1, 2);
        System.out.println(s); // ABab
        System.out.println(s1); // Ba
    }
}

总结:把一个字节数组转成字符串数据,而字节数组中的每个整数,都会根据编码表查阅到对应的字符,然后把这些字符拼成字符串。

  • 把字符数组或int类型的数组转成字符串
    在这里插入图片描述
public class demo1 {
    public static void main(String[] args) {
        int[] ints = {65,77,97,98};
        String s = new String(ints, 1, 2);
        System.out.println(s); // Ma
        char[] chs = {'h','e','l','l','o'};
        String s2 = new String(chs);
        System.out.println(s2); // hello
    }
}
  • 把一个字符串或者字符串缓冲区中的数据变成字符串
    在这里插入图片描述
public class demo1 {
    public static void main(String[] args) {
        // 存在1个对象
        String s1 = "abc";
        // 存在2个对象
        String s2 = new String("abc");
        System.out.println(s1 + "---" + s2); // abc---abc
        System.out.println(s1 == s2); // false
    }
}

String类的判断方法

说明:Object:是类层次结构中的根类,所有的类都直接或者间接的继承自该类。如果一个方法的形式参数是Object,那么这里我们就可以传递它的任意的子类对象。

boolean equals(Object obj); // 比较字符串的内容是否相同
boolean equalsIgnoreCase(String str); // 比较字符串的内容是否相同,忽略大小写
boolean startsWith(String str); // 判断字符串对象是否以指定的str开头
boolean endsWith(String str); // 判断字符串对象是否以指定的str结尾

注意:如果想比较两个字符串相等,我们不应该使用==,==是用来比较具体常量数值的。而由于字符串是对象,所以我们应该使用String类中的equals函数对两个字符串进行比较,因为equals函数是用来比较两个对象是否相等。

String类的获取方法

int length():获取字符串的长度,其实也就是字符个数
char charAt(int index):获取指定索引处的字符
int indexOf(String str):获取str在字符串对象中第一次出现的索引
String substring(int start):从start索引开始截取字符串,截取到字符串最后
String substring(int start,int end):从start开始,到end结束截取字符串。包括start,不包括end。(包头不包尾)

public class demo1 {
    public static void main(String[] args) {
		// 定义一个字符串
        String s = "helloworld";
        // int length():获取字符串的长度,其实也就是字符个数
        System.out.println(s.length()); // 10
        // char charAt(int index):获取指定索引处的字符
        System.out.println(s.charAt(0)); // h
        // int indexOf(String str):获取str在字符串对象中第一次出现的索引
        System.out.println(s.indexOf("or")); // 6
        // String substring(int start):从start索引开始截取字符串,截取到字符串最后,包括start
        System.out.println(s.substring(5)); // world
        // String substring(int start,int end):从start开始,到end结束截取字符串。包括start,不包括end。(包头不包尾)
        System.out.println(s.substring(1,5)); // ello
    }
}

String类的转换功能

char[] toCharArray():把字符串转换为字符数组
String toLowerCase():把字符串中的所有大写字母转换为小写字母
String toUpperCase():把字符串中的小写字母转换为大写字母

public class demo1 {
    public static void main(String[] args) {
        // 创建字符串对象
        String s = "abcde";
        // char[] toCharArray():把字符串转换为字符数组
        char[] chs = s.toCharArray();
        for (int x = 0; x < chs.length; x++) {
            System.out.println(chs[x]);
        }
        // String toLowerCase():把字符串转换为小写字符串
        System.out.println("HelloWorld".toLowerCase()); // helloworld
        // String toUpperCase():把字符串转换为大写字符串
        System.out.println("HelloWorld".toUpperCase()); // HELLOWORLD
    }
}

String类的其它方法

A:去除字符串两端空格 :String trim()
注意:trim()函数是去除字符串两端的空格,而不是字符串中所有的空格。
B:按照指定的字符串分割字符串:String[] split(String str)
注意:切割的时候指定的字符串最好一定是长串中存在的内容;如果指定的字符串不在长串中,那么程序就会把整个字符串作为返回值,那么接收切割后的字符串数组中只存储一个数据,即原来的长串。

public class demo1 {
    public static void main(String[] args) {
        String s2 = "  itheima ";
        String s3 = "  it  heima ";
        System.out.println("---" + s2 + "---"); // ---  itheima ---
        System.out.println("---" + s2.trim() + "---"); // ---itheima---
        System.out.println("---" + s3 + "---"); // ---  it  heima ---
        System.out.println("---" + s3.trim() + "---"); // ---it  heima---
        // String[] split(String str)
        String s4 = "aa,bb,cc";
        String[] strArray = s4.split(",");
        for (int x = 0; x < strArray.length; x++) {
            System.out.println(strArray[x]);
        }
    }
}

字符串缓冲区

  • 在String类的api中告诉我们说String类是不能更改的,需要更改应该找字符串缓冲区。
  • Java中提供2个字符串缓冲区StringBuffer和StringBuilder。
  • 缓冲区:就是一个临时空间,它里面可以临时存储数据。缓冲区本身就是一个容器。
  • 字符串缓冲区:它本身就是一个容器,只不过这个缓冲区最后会把里面的所有数据全部给变成字符串而已。
  • 当我们需要对字符串进行数据的修改,这时不能直接使用String类,而把需要修改的字符串先存储到字符串缓冲区容器中,在容器中进行各种修改,等最后确定不再修改的时候,把里面的数据变成一个字符串,然后存储在字符串常量池中。

StringBuilder类

① 是一个字符串缓冲区,其实就是一个容器;
② 长度是可变的,任意类型都可以。注意:是将任意数据都转成字符串进行存储;
③ 容器对象提供很多对容器中的数据操作的功能,比如添加,删除,修改,查询;
④ 所有的数据最终都会变成一个字符串;
⑤ 和数组最大的不同就是数组存储完可以单独操作每一个元素,每一个元素都是独立的。
字符串缓存区,所有存储的元素都会被转成字符串,而且变成了一个更长的字符串。

  • StringBuilder类的常用方法
    构造方法:
    1、StringBuilder():对于StringBuilder()构造函数,其初始容量为16个字符表示,如果存在StringBuilder的数据超过了16个字符,这个容器可以自动扩容(容器空间自动变大);StringBuilder底层体现就是一个字符数组,StringBuilder类的对象将数组封装起来,然后对外提供很多便捷方法,而数组本身是没有什么太多方法的。如果外界将数据存放到底层的数组中,如果底层数组空间存放不下外界传递过来的值,那么jvm会基于原来存在的数组在创建一个新的数组,长度是原来数组的一倍,然后jvm将原来数组的数据全部复制(遍历数组,将数据添加到新的数组中)到新的数组中,然后在数组后面的空间中给数组添加新的值,如果还是存不下在创建一个新的数组。
    2、StringBuilder(int capacity):capacity表示容器的容量,如果在开发中想自己设置缓冲区大小,可以通过此构造函数来实现;
    3、public int capacity():返回当前容量 (理论值)
    4、public int length():返回长度(已经存储的字符个数)
    5、public StringBuilder append(任意类型):添加数据,并返回自身对象
    6、public StringBuilder reverse():反转功能
        StringBuilder sb = new StringBuilder();
        System.out.println("sb.capacity():"+sb.capacity()); // 16
        System.out.println("sb.length():"+sb.length()); // 0
        sb.append("hello").append("world").append(true).append(100);
        System.out.println("sb:"+sb); // helloworldtrue100
        sb.reverse();
        System.out.println("sb:"+sb); // 001eurtdlrowolleh

StringBuilder和String通过方法完成相互转换。
1) StringBuilder – >String
public String toString():通过StringBuilder类中的toString()方法就可以实现把StringBuilder转成String。

		StringBuilder sb = new StringBuilder();
		sb.append("hello").append("world");	
		String s = sb.toString();

2) String --> StringBuilder
StringBuilder(String str):通过StringBuilder类的构造方法就可以实现把String转成StringBuilder

		String s = "helloworld";
		StringBuilder sb = new StringBuilder(s);

猜你喜欢

转载自blog.csdn.net/weixin_43365369/article/details/88781862
今日推荐