• 非零基础自学Java (老师:韩顺平) 第13章 常用类 13.2 String 类 && 13.3 字符串的特性 && 13.4 String 类的常见方法


    非零基础自学Java (老师:韩顺平)

    ✈【【零基础 快速学Java】韩顺平 零基础30天学会Java】

    第13章 常用类

    13.2 String 类

    在这里插入图片描述

    13.2.1 String 类的理解和创建对象

    String对象用于保存字符串,也就是一组字符序列。

    字符串常量对象是用双引号括起的字符序列。

    字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节。

    String类较常用构造器:

    • String s1 = new String();
    • String s2 =new String(String original);
    • String s3 = new String(char a);
    • String s4 = new String(charla,int startlndex,int count)

    在这里插入图片描述

    在这里插入图片描述

    【举个栗子】

    package com.dingjiaxiong.string_;
    
    /**
     * ClassName: String01
     * date: 2022/9/4 15:47
     *
     * @author DingJiaxiong
     */
    
    public class String01 {
        public static void main(String[] args) {
    //        String s1 = new String();
    //        String s2 = new String(String original);
    //        String s3 = new String(char[] a);
    //        String s4 = new String(char[] a,int startIndex , int count);
    //        String s5 = new String(byte[] b);
    
            5. String 类实现了接口 Serializable【String 可以串行化:可以在网络传输】
             接口 Comparable [String 对象可以比较大小]
            6. String 是 final 类,不能被其他的类继承
            7. String 有属性 private final char value[]; 用于存放字符串内容
            8. 一定要注意:value 是一个 final 类型, 不可以修改(需要功力):即 value 不能指向
             新的地址,但是单个字符内容是可以变化
    
            String name = "Jack";
            name = "Tom";
    
            final char[] value = {'a' , 'b' , 'c'};
            char[] v2 = {'t' , 'o' , 'm'};
    
            value[0] = 'H';
    
    //        value = v2;  //不能修改value地址
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    13.2.2 创建String 对象的两种方式
    1. 直接赋值 String s = “Dingjiaxiong”;
    2. 调用构造器 String s = new String(“Dingjiaxiong”);
    13.2.3 两种创建String 对象的区别

    【方式一 直接赋值 String s = “Dingjiaxiong”;】

    方式一:先从常量池查看是否有"Dingjiaxiong”数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s最终指向的是常量池的空间地址

    【方式二 调用构造器 String s = new String(“Dingjiaxiong”);】

    方式二:先在堆中创建空间,里面维护了value属性,指向常量池的Dingjiaxiong空间。如果常量池没有"Dingjiaxiong",重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址。

    【两种方式的内存分布图】

    在这里插入图片描述

    13.3 字符串的特性
    13.3.1 说明

    String是一个final类,代表不可变的字符序列

    字符串是不可变的。一个字符串对象一旦被分配,其内容是不可变的.

    【举个栗子】

    String s1 = "hello";
    s1 = "haha";
    
    • 1
    • 2

    【上述语句创建了2个对象】

    13.4 String 类的常见方法
    13.4.1 说明

    String类是保存字符串常量的。每次更新都需要重新开辟空间,效率较低,

    因此java设计者还提供了StringBuilder和 StringBuffer 来增强String的功能,并提高效率。

    13.4.2 String 类的常见方法一览
    • equals //区分大小写,判断内容是否相等
    • equalslgnoreCase //忽略大小写的判断内容是否相等
    • length //获取字符的个数,字符串的长度
    • indexOf //获取字符在字符串中第1次出现的索引,索引从0开始,如果找不到,返回-1
    • lastIndexOf //获取字符在字符串中最后1次出现的索引,索引从0开始,如找不到,返回
    • substring //截取指定范围的子串
    • trim //去前后空格
    • charAt //获取某索引处的字符,注意不能使用Str[index]这种方式.

    【举个栗子】

    package com.dingjiaxiong.string_;
    
    
    /**
     * ClassName: StringMethod01
     * date: 2022/9/4 16:03
     *
     * @author DingJiaxiong
     */
    
    public class StringMethod01 {
        public static void main(String[] args) {
    
            //1. equals,因为重写过,所以是比较内容是否相同,区分大小写
            String str1 = "hello";
            String str2 = "Hello";
    
            System.out.println(str1.equals(str2));
    
            //2.equalsIgnoreCase 忽略大小写的判断内容是否相等
            String username = "johN";
            if ("john".equalsIgnoreCase(username)){
                System.out.println("成功");
            }else{
                System.out.println("失败");
            }
    
            // 3.length 获取字符的个数,字符串的长度
            System.out.println("韩老师666".length());
    
            // 4.indexOf 获取字符在字符串对象中第一次出现的索引,索引从 0 开始,如果找不到,返回-1
            String s1 = "wer@terwe@g";
            int index = s1.indexOf('@');
            System.out.println(index);
            System.out.println("weIndex = "+ s1.indexOf("we"));
    
            // 5.lastIndexOf 获取字符在字符串中最后一次出现的索引,索引从 0 开始,如果找不到,返回-1
            s1 = "wer@terwe@g@";
            index = s1.lastIndexOf('@');
            System.out.println(index);
            System.out.println("ter的位置 = " + s1.lastIndexOf("ter"));
    
            /// 6.substring 截取指定范围的子串
            String name = "Hello , 张三";
            System.out.println(name.substring(6));
    
            System.out.println(name.substring(2,5));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    运行结果

    在这里插入图片描述

    【还有一些String 相关方法】

    package com.dingjiaxiong.string_;
    
    import javax.lang.model.element.NestingKind;
    
    /**
     * ClassName: StringMethod02
     * date: 2022/9/4 16:09
     *
     * @author DingJiaxiong
     */
    
    public class StringMethod02 {
        public static void main(String[] args) {
            // 1.toUpperCase 转换成大写
            String s = "heLLo";
            System.out.println(s.toUpperCase());
    
            // 2.toLowerCase 转换成小写
            System.out.println(s.toLowerCase());
    
            // 3.concat 拼接字符串
            String s1 = "宝玉";
            s1 = s1.concat("林黛玉").concat("孙悟空").concat("JavaJava");
            System.out.println(s1);
    
            // 4.replace 替换字符串中的字符
            s1 = "宝玉 and 林黛玉 林黛玉 林黛玉";
            String s11 = s1.replace("宝玉","Jack");
            System.out.println(s1);
            System.out.println(s11);
            //对s1没有影响
    
            // 5.split 分割字符串
            String poem = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";
    
            String[] split = poem.split(",");
            for (int i = 0; i < split.length; i++) {
                System.out.println(split[i]);
            }
    
            poem = "E:\\aaa\\bbb";
            split = poem.split("\\\\");
            for (int i = 0; i < split.length; i++) {
                System.out.println(split[i]);
            }
    
            // 6.toCharArray 转换成字符数组
            s = "happy";
            char[] chs = s.toCharArray();
            for (int i = 0; i < chs.length; i++) {
                System.out.print(chs[i] + " ");
            }
    
            System.out.println();
    
            // 7.compareTo 比较两个字符串的大小,如果前者大,
            // 则返回正数,后者大,则返回负数,如果相等,返回0
    
            //韩老师解读
            // (1) 如果长度相同,并且每个字符也相同,就返回 0
            // (2) 如果长度相同或者不相同,但是在进行比较时,可以区分大小
            // 就返回 if (c1 != c2) {
            // return c1 - c2;
            // }
            // (3) 如果前面的部分都相同,就返回 str1.len - str2.len
    
            String a = "jcck";
            String b = "jack";
    
            System.out.println(a.compareTo(b)); //返回 'c' - 'a' = 2
    
            // 8.format 格式字符串
            //占位符
            // * %s 字符串 %c 字符 %d 整型 %.2f 浮点型
            String name = "john";
            int age = 10;
    
            double score = 56.789;
            char gender = '男';
    
            String formatStr = "我的姓名是%s 年龄是%d 成绩是 %.2f 性别是 %c ";
            String info = String.format(formatStr,name,age,score,gender);
    
            System.out.println(info);
    
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87

    运行结果

    在这里插入图片描述

  • 相关阅读:
    机器视觉工程师们,常回家看看
    Hive之内部表外部表和分区表分桶表
    社区团购美团和多多买菜小程序购物车
    APP基本框架搭建丨一键换肤 - Android-skin-support
    美团面试拷打:ConcurrentHashMap 为何不能插入 null?HashMap 为何可以?
    HTML5学习系列之简单使用1
    el-tree 获取过滤后的树结构
    String-Worker 让创建 WebWorker 更轻松
    计算机网络自顶向下实例
    用numpy搭建自己的神经网络
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126926280