第十章_String and StringBuilder的使用和区别

第十章_String and StringBuilder的使用和区别

1. String类

1.1 String概述
  • String类在java.lang包下,使用的时候不需要导包
  • String类代表字符串,Java 程序中的所有字符串文字(例如“abc”)都被实现为此类的实例也就是说,Java 程序中所有的双引号字符串,都是 String 类的对象
  • 字符串不可变,它们的值在创建后不能被更改
1.2 String类的构造方法
常用构造方法
方法名说明
public String()创建一个空白的字符串对象,不含有任何内容
public String(char[] chs)根据字符数组的内容,来创建字符串对象
public String(String original)根据传入的字符串内容,来创建字符串对象
String s= “abc”;(特殊)直接复制的方式创建字符串对象,内容就是abc

代码演示:

public class Test {
    public static void main(String[] args) {
        /*
         注意:
                String这个类比较特殊, 打印其对象名的时候, 不会出现内存地址
                而是该对象所记录的真实内容.
                面向对象-继承, Object类
         */
//        String类常见构造方法:
//            public String() : 创建一个空白字符串对象,不含有任何内容
        System.out.println("------------------");
        String s1 = new String();
        System.out.println(s1);
        System.out.println("-------------");

//            public String(char[] chs) : 根据字符数组的内容,来创建字符串对象
        char[] chars = {'a','b','c','c'};
        String s2 = new String(chars);
        System.out.println(s2);
        System.out.println("-------------");

//            public String(String original) : 根据传入的字符串内容,来创建字符串对象
        String s3 = new String("eeeeeee");
        System.out.println(s3);
        System.out.println("-------------");

//        String s = “abc”;  直接赋值的方式创建字符串对象,内容就是abc
        String s4 = "快乐的E";
        System.out.println(s4);
    }
}

执行效果:

在这里插入图片描述

1.3字符串对象的区别对别
  • 通过构造方法创建

    ​ 通过 new 创建的字符串对象,每一次 new 都会申请一个内存空间,虽然内容相同,但是地址值不同

  • 直接赋值方式创建

    ​ 以“ ”方式给出的字符串,只要字符序列相同(顺序和大小写),无论在程序代码中出现几次,JVM 都只会建立一个 String 对象,并在字符串池中维护

代码演示:

public class Test {
    public static void main(String[] args) {
        String s1 = new String("aaa");
        String s2 = new String("aaa");
        System.out.println(s1 == s2);//false
        System.out.println("-----------------------");
        String s3 = "abc";
        String s4 = "abc";
        System.out.println(s3 == s4);//true
    }
}

执行效果:

在这里插入图片描述

1.4字符串的比较
  • == 比较基本数据类型:比较的是具体的值
  • == 比较引用数据类型:比较的是对象地址值

String类 : public boolean equals(String s) 比较两个字符串内容是否相同、区分大小写

public boolean equalsIgnoreCase(String s) 比较两个字符串内容是否相同、不区分大小写

代码演示:

public class Test {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "ABC";
        String s3 = "abc";

        // equals : 比较字符串内容, 区分大小写
        System.out.println(s1.equals(s2));//false
        System.out.println(s1.equals(s3));//true
        System.out.println("---------------");

        // equalsIgnoreCase : 比较字符串内容, 忽略大小写
        System.out.println(s1.equalsIgnoreCase(s2));//true
        System.out.println(s1.equalsIgnoreCase(s3));//true
    }
}

执行效果:

在这里插入图片描述

1.5 字符串的遍历

案例需求 :

​ 键盘录入一个字符串,使用程序实现在控制台遍历该字符串

实现方式1

实现步骤 :

  1. 键盘录入一个字符串,用 Scanner 实现
  2. 遍历字符串,首先要能够获取到字符串中的每一个字符, public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的
  3. 遍历字符串,其次要能够获取到字符串的长度, public int length():返回此字符串的长度
  4. 遍历打印

​ 遍历字符串,首先要能够获取到字符串中的每一个字符
public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的

代码演示:

/*
        需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串

        思路:
        1. 键盘录入一个字符串,用 Scanner 实现
        2. 遍历字符串,首先要能够获取到字符串中的每一个字符
            public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的
        3. 遍历字符串,其次要能够获取到字符串的长度
            public int length():返回此字符串的长度
        4. 遍历打印
9
     */
    public static void main(String[] args) {
        //  1. 键盘录入一个字符串,用 Scanner 实现
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入:");
        String s = sc.nextLine();
        // 2. 遍历字符串,首先要能够获取到字符串中的每一个字符
        for(int i = 0; i < s.length(); i++){
            // i : 字符串的每一个索引
            char c = s.charAt(i);
            System.out.println(c);
        }
    }

执行效果:

在这里插入图片描述

实现方式2

实现步骤 :

  1. 键盘录入一个字符串,用 Scanner 实现
  2. 将字符串拆分为字符数组 , public char[] toCharArray( ):将当前字符串拆分为字符数组并返回
  3. 遍历字符数

代码演示:

public class Test {
    /*
        需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串

        思路:
        1. 键盘录入一个字符串,用 Scanner 实现
        2. 将字符串拆分为字符数组
                 public char[] toCharArray( ):将当前字符串拆分为字符数组并返回
        3. 遍历字符数组

     */
    public static void main(String[] args) {
        //  1. 键盘录入一个字符串,用 Scanner 实现
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入:");
        String s = sc.nextLine();
        // 2. 将字符串拆分为字符数组
        char[] chars = s.toCharArray();
        // 3. 遍历字符数组
        for (int i = 0; i < chars.length; i++) {
            System.out.println(chars[i]);
        }
    }
}

执行效果:

在这里插入图片描述

1.6 字符串中的常用方法
方法名功能
substring截取字符串:
传入一个参数:从当前索引开始到最后
传入两个参数:截取一段字符串(是一个前闭后开的区间,含头不含尾)
replace替换字符串:
传入第一个参数是要被替换的内容
传入第二个参数是替换后的内容
split切割字符串:
需要符合正则表达式的规则,特殊字符需要转义
concat将指定的字符串连接到字符串的末尾
charAt返回指定索引处的char值
toCharArray把字符串转为一个数组
indexOf获取某个字符在字符串中第一次出现的索引
length获取字符串的长度
contains判断字符串中是否含有指定的内容
equals判断字符串内容是否相同
equalsIgnoreCase判断字符串内容是否相同(忽略大小写)
startwith判断是否以指定的内容开头
endwith判断是否以指定的内容结尾
getBytes将指定字符串转成byte数组
toLowerCase把字符串中的字母全部转为小写
toUpperCase把字符串中的字母全部转为大写
trim去掉字符串两端的空格

2. StringBuilder类

2.1 StringBuilder概述

​ StringBuilder 是一个可变的字符串类,我们可以把它看成是一个容器,这里的可变指的是 StringBuilder 对象中的内容是可变的。

2.2 StringBuilder类的构造方法

常用的构造方法

方法名说明
public StringBuilder()创建一个空白可变字符串对象,不含有任何内容
public StringBuilder(String str)根据字符串的内容,来创建可变字符串对象

代码演示:

public class Test {
    public static void main(String[] args) {
        System.out.println("-----------------------");
        StringBuilder sb = new StringBuilder();//是一个空行
        System.out.println(sb);
        System.out.println("------------------");

        StringBuilder sb2 = new StringBuilder("abc");//有参构造
        System.out.println(sb2);

    }
}

执行效果:

在这里插入图片描述

2.3 StringBuilder和String的区别
  • String的内容在对象创建之后是不可变的,在拼接字符串时,每次都会new一个新的对象去拼接
  • StringBuilder的内容是可以改变的,直接在该对象后面拼接

String和StringBuilder的图解

在这里插入图片描述

代码演示:

创建两个方法,分别对String和StringBuilder进行5w次的字符串拼接

public class Test {
    public static void main(String[] args) {
        stringTime();
        stringBuilderTime();
    }

    private static void stringBuilderTime() {
        //获取当前系统的时间。从1970年1月1日 0点开始  单位是毫秒值
        long start = System.currentTimeMillis();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 50000; i++) {
            sb.append(i);
        }
//        System.out.println(s);
        long end = System.currentTimeMillis();
        System.out.println("使用StringBuilder拼接字符串使用的时间:"+(end-start));
    }

    private static void stringTime() {
        //获取当前系统的时间。从1970年1月1日 0点开始  单位是毫秒值
        long start = System.currentTimeMillis();
        String s = "";
        for (int i = 0; i < 50000; i++) {
            s+=i;
        }
//        System.out.println(s);
        long end = System.currentTimeMillis();
        System.out.println("使用String拼接字符串使用的时间:"+(end-start));
    }
}

执行效果:

在这里插入图片描述

2.4 StringBuilder常用的成员方法

添加和反转方法

方法名说明
public StringBuilder append(任意类型)添加数据,并返回对象本身
public StringBuilder reverse()返回相反的字符序列
public String toString()把StringBuilder对象转化为String类型

代码演示:

public class Test {
    public static void main(String[] args) {

//        StringBuilder拼接不限定类型
        StringBuilder sb = new StringBuilder();

        sb.append(15);
        sb.append("afg");
        sb.append(true);

        System.out.println("反转前:"+sb);

        //字符串反转
        sb.reverse();
        System.out.println("反转后:"+sb);

        System.out.println("长度:"+sb.length());

        //把StringBuilder对象转化为String对象
        String s = sb.toString();
        System.out.println(s);
    }
}

执行效果:

在这里插入图片描述

总结

  1. String的长度不可变
  2. StringBuilder的长度可变
  3. 拼接字符串时使用StringBuilder的效率更高
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值