String类、StringBuilder类、链式编程、包装类

String类

两个String类需要知道的知识点:

  • 字符串的操作不会改变原本的字符串,都是产生一个新的字符串返回。
  • 任意数据类型与字符串拼接都是字符串。包括与空字符串拼接。

特点:

  1. 字符串不变:字符串的值在创建后不能被更改。
  2. 因为String对象是不可变的,所以它们可以被共享。
  1. 直接赋值的字符串,去常量池找,如果没有就在常量池中创建一个。
  2. 第二次直接赋值的字符串,在常量池中可以找到,直接拿过来使用,存储在常量池中可以多次使用,节省空间。
  3. new String ( )  ,new是存储在堆中,new一次申请一块空间,new两次申请两块空间,这两块空间时相互独立的。

代码说明:

public class Demo {
    public static void main(String[] args) {
        String s1 = "abc";
        s1 += "d";
        System.out.println(s1);// "abcd"
        // 内存中有"abc","abcd"两个对象,s1从指向"abc",改变指向,指向了"abcd"。
        String s2 = "abc";
        String s3 = "abc";
        // 内存中只有一个"abc"对象被创建,同时被s2和s3共享。
    }
}

String的构造方法:

String()

  • 创建一个空的字符串。

String(String original)

  • 创建一个新的字符串,内容和参数时一样的。

String(char[] value)

  • 将字符数组中的内容组成一个字符串。

String(byte[] bytes)

  • 通过字节数组组成字符串。
  • 使用字节去ASCII码表中找到对应的字符,将数组拼成字符串。

​​​​​​​String(byte[] bytes, int offset, int length)

  • 通过字节数组一部分来构造新的字符串对象。
  • int offset: 从哪个索引开始。
  • int length : 长度
  • 若超出了字符串,会报错。

​​​​​​​直接赋值字符串。

示例代码:

public class Demo {
    public static void main(String[] args) {
       // 1.String() 创建一个空的字符串对象
    String str1 = new String();
    System.out.println("str1:" + str1);
    // 2.String(String original) 根据字符串来创建一个字符串对象
    String str2 = new String("abc");
    System.out.println("str2:" + str2);
    // 3.String(char[] value) 通过字符数组来创建字符串对象
    char[] chs = {'A', 'B', 'C', 'D', 'E'};
    String str5 = new String(chs);
    System.out.println("str5:" + str5);
    // 4.String(byte[] bytes) 通过字节数组来构造新的字符串对象
    byte[] bytes = {97, 98, 99, 100, 101}; // a, b, c, d, e
    String str3 = new String(bytes);
    System.out.println("str3:" + str3);
    // 5.String(byte[] bytes, int offset, int length) 通过字节数组一部分来构造新的字符串对象
    String str4 = new String(bytes, 1, 2);
    System.out.println("str4:" + str4);
    //6.直接赋值字符串。
    String str6 = "abcde";
    System.out.println("str6:" + str6);
    }
}

String的判断功能:

public boolean equals (Object anObject)

  1. 比较字符串的内容是否相等。
  2. 常用于用户的帐号密码匹配,要一模一样。

​​​​​​​public boolean equalsIgnoreCase (String anotherString)

  • 比较字符串的内容是否相等,忽略大小写。
  • 常用于验证码的判断(忽略大小写都可以)

​​​​​​​boolean startsWith(String prefix)

  • 测试此字符串是否以指定的前缀开头。
  • 并不一定是一个字符,也可以是多个字符。

​​​​​​​boolean endWith (String suffix)

  • 测试此字符串是否以指定的后缀结尾。
  • 并不一定是一个字符,也可以是多个字符。

示例代码:

public class Demo03 {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = new String("hello");
        String str3 = "Hello";

        // 1.boolean equals​(Object anObject) 比较字符串的内容是否相等
        // 常用于用户的账号密码匹配,要一模一样
        System.out.println("equals: " + str1.equals(str2)); // equals: true
        System.out.println("equals: " + str1.equals(str3)); // equals: false

        // 2.boolean equalsIgnoreCase​(String anotherString) 比较字符串的内容是否相等,忽略大小写
        // 常用于验证码的判断(大小写都可以)
        System.out.println("equalsIgnoreCase: " + str1.equalsIgnoreCase(str3)); // equalsIgnoreCase: true

        // 3.boolean startsWith​(String prefix) 测试此字符串是否以指定的前缀开头。
        System.out.println("startsWith: " + str1.startsWith("h")); // true
        System.out.println("startsWith: " + str1.startsWith("he")); // true
        System.out.println("startsWith: " + str1.startsWith("e")); // false

        // 4.boolean endsWith​(String suffix) 测试此字符串是否以指定的后缀结尾。
        System.out.println("endsWith: " + str1.endsWith("o")); // true
        System.out.println("endsWith: " + str1.endsWith("lo")); // true
        System.out.println("endsWith: " + str1.endsWith("l")); // false
    }
}

String的获取功能:

int length​()

  • 返回此字符串的长度。

​​​​​​​String concat​(String str)

  • 将指定的字符串连接到该字符串的末尾。​​​​​​​
  • 字符串的操作不会改变原本的字符串,都是产生一个新的字符串返回。

​​​​​​​char charAt​(int index)

  • 返回指定索引处的 char值。

​​​​​​​int indexOf​(String str)

  • 返回指定子字符串第一次出现的字符串内的索引。
  • -1表示没有找到。

​​​​​​​String substring​(int beginIndex)

  • 返回一个字符串,该字符串是此字符串的子字符串。
  • 从哪个位置开始,到结束 一刀两段

​​​​​​​String substring​(int beginIndex, int endIndex)

  • 返回一个字符串,该字符串是此字符串的子字符串。
  • 两刀三段取中间,包含开头,不包含结尾。

​​​​​​​String trim()

  • 处理字符串前后多余的空格。(中间的空格不能去掉)

示例代码:

public class Demo04 {
    public static void main(String[] args) {
        String str1 = new String("HelloWorld中国");
        System.out.println("长度 = " + str1.length()); // 长度 = 12

        String str2 = str1 + "你好";
        System.out.println("str2 = " + str2); // str2 = HelloWorld中国你好

        // String concat​(String str) 将指定的字符串连接到该字符串的末尾。
        // 字符串的操作不会改变原本的字符串,都是产生一个新的字符串返回
        String str3 = str1.concat("你好2"); // "HelloWorld中国你好2"
        System.out.println("str3 = " + str3); // str3 = HelloWorld中国你好2

        // 3.char charAt​(int index) 返回指定索引处的 char值。
        //             01234 56
        String str4 = "HelloWo";
        System.out.println("char = " + str4.charAt(0)); // H

        // 4.int indexOf​(String str) 返回指定子字符串第一次出现的字符串内的索引。
        System.out.println("indexOf = " + str4.indexOf("e")); // 1
        System.out.println("indexOf = " + str4.indexOf("llo")); // 2    第一给字母的索引
        System.out.println("indexOf = " + str4.indexOf("ak")); // -1表示没有找到

        String str5 = "HelloWo";
        // 5.String substring​(int beginIndex) 返回一个字符串,该字符串是此字符串的子字符串。
        // int beginIndex: 从哪个位置开始,到结束 一刀两段
        String sub1 = str5.substring(1);
        System.out.println("str5 = " + str5); // str5 = HelloWo
        System.out.println("sub1 = " + sub1); // sub1 = elloWo

        // 6.String substring​(int beginIndex, int endIndex) 返回一个字符串,该字符串是此字符串的子字符串。
        // 两到三段取中间,包含开头不包含结尾
        String sub2 = str5.substring(1,4);
        System.out.println("sub2 = " + sub2); // sub2 = ell
    }
}

String的转换功能:

char[] toCharArray​()

  • 将此字符串转换为新的字符数组。

​​​​​​​byte[] getBytes​()

  • 将字符串转成字节数组、

​​​​​​​String toLowerCase​()

  • 将此 String所有字符转换为小写。

​​​​​​​String toUpperCase​()

  • 将此 String所有字符转换为大写。

String replace​(CharSequence target, CharSequence replacement)

  • 将字符串中target内容替换为replacement。
  • 全部都改变,不是只修改第一个。

示例代码:

public class Demo05 {
    public static void main(String[] args) {
        String str1 = "HelloWorld";
        // 1.char[] toCharArray​() 将此字符串转换为新的字符数组。
        char[] chs = str1.toCharArray();

        // 2.byte[] getBytes​() 将字符串转成字节数组
        byte[] bytes = str1.getBytes();

        // 3.String toLowerCase​() 将此 String所有字符转换为小写。
        String str2 = str1.toLowerCase(); // 将str1字符串中的内容全部转成小写
        System.out.println("toLowerCase = " + str2); // toLowerCase = helloworld

        // 4.String toUpperCase​() 将此 String所有字符转换为大写。
        String str3 = str1.toUpperCase();
        System.out.println("toUpperCase = " + str3); // toUpperCase = HELLOWORLD

        // 5.String replace​(CharSequence target, CharSequence replacement) 将字符串中target内容替换为replacement
        String str5 = "我爱你"; // 你 --换成-> 中国
        String str6 = str5.replace("你", "中国");
        System.out.println("replace = " + str6); // replace = 我爱中国
    }
}

String分割功能:

String[] split​(String regex)

  • 根据指定的内容将字符串分割成多个内容

注意:

切割的时候,如果用"."来切割,则必须要换成"\\.",因为"."是正则表达式的通配符,会匹配任何字符,会把此字符切碎,返回的数组为null。

StringBuilder类

StringBuilder类概述:

本质就是一个字符串,是可变的字符串。

  • String:不可变的字符串。

StringBuilder的作用:

解决字符串拼接耗性能的问题。

StringBuilder类构造方法:

StringBuilder()

  • 创建可变字符串,默认数组长度是16。

​​​​​​​StringBuilder(String str)

  • 将不可变字符串转换为可变字符串,默认数组长度是16。

​​​​​​​对扩容问题的解释:

  • 一开始创建容量为16的数组,添加元素的时候,如果数组以满,则会自动扩容。每一次扩容都是当前容量的一倍。

StringBuilder类常用方法:

StringBuilder append(数据类型 变量名)

  • 拼接内容。

​​​​​​​String toString()

  • 将可变字符串转换为不可变字符串。

​​​​​​​StringBuilder  deleteCharAt(int index)]

  • 删除指定索引,返回字符串。

​​​​​​​StringBuilder reverse()

  • 反转数组。

使用场景:

如果需要执行大量的字符串拼接操作,则强烈推荐使用StringBuilder。

链式编程

当方法返回值是一个对象时,可以继续调用对象的方法。

包装类

概述:

一个可以将基本数据类型封装成对象的类则称为包装类。

包装类常见操作:

  1. 将字符串转换为对应的基本数据类型。
  2. 将基本数据类型转换为字符串类型。

Integer包装类概述

构造方法:   (已淘汰,了解即可)

Integer(int value)

  • 将一个整数value转换成整型包装类对象。

​​​​​​​Integer(String s)

  • 将一个字符串数值转换成整型包装类对象。

成员方法:

int intValue()

  • 将包装类对象转换为基本数据类型整型。

​​​​​​​static Integer valueOf(int num)

  • 将基本数据整型转换为包装类对象

​​​​​​​static int parseInt(String str)

  • 把字符串转换为int值。

​​​​​​​static String toString(int i)

  • 将整数i转换成字符串

静态成员变量:

  • Integer.MAX_VALUE:整数最大值
  • Integer.MIN_VALUE:整数最小值

自动装箱与自动拆箱

自动装箱和自动拆箱概述:

JDK1.5的新特性。

自动装箱:

Java编译器自动将基本数据类型转换为对应的包装类类型的过程。

自动拆箱:

Java编译器自动将包装类类型转换为对应的基本数据类型的过程。

小结:

只要两边数据类型不一致,一边是基本数据类型,一边包装类类型,则就会发送自动装箱或自动拆箱。​​​​​​​

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页