• (JavaSE) String类


    ⭐字符串构造

    在这里插入图片描述
    3种构造方式

            String str1="hello";
            String str2=new String("abc");
            char[] chars={'x','y','z'};
            String str3=new String(chars);//数组转字符串
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    String类有两个成员:value[],hash。
    在这里插入图片描述

    Java中的字符串没有’\0’。
    在这里插入图片描述
    求字符串长度:
    .length()

            System.out.println(s1.length());
            System.out.println("hello".length());
    
    • 1
    • 2

    ⭐比较两个字符串是否相等

    🎈equals()

    常见错误:

            String s1 = new String("hello");
            String s2 = new String("Hello");
            System.out.println(s1==s2);
    
    • 1
    • 2
    • 3
    false
    
    • 1

    s1和s2这两个引用存的是地址,比较的是地址而不是内容

    正确的比较方法:

            System.out.println(s1.equals(s2));
    
    • 1

    String类重写了Object类的.equals()。
    在这里插入图片描述

    🎈equalsIgnoreCase()

    忽略大小写进行比较

    System.out.println(s1.equalsIgnoreCase(s2));
    
    • 1

    ⭐比较两个字符串的大小

    🎈compareTo()

    在这里插入图片描述

    String s1 = new String("hello");
            String s2 = new String("aello");
            int ret=s1.compareTo(s2);
            if(ret>0){
                System.out.println("s1>s2");
            }else if(ret==0){
                System.out.println("s1=s2");
            }else {
                System.out.println("s1);
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    🎈compareToIgnoreCase()

    也可以忽略大小写进行比较

            int ret=s1.compareToIgnoreCase(s2);
    
    • 1

    字符串查找

    🎈charAt()

    用下标访问字符串的每一个字符

    String str="abcdef";
            for (int i = 0; i < str.length(); i++) {
                char ch=str.charAt(i);
                System.out.println(ch);
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    🎈indexOf()

    从头开始找遇到第一个就返回其下标

    System.out.println(str.indexOf('c'));
    
    • 1

    也可以指定查找的起点

            System.out.println(str.indexOf('c',3));
    //从3下标开始找'c'
    
    • 1
    • 2

    查找字符串的子串

            System.out.println(str.indexOf("abc"));
    //返回'a'的下标
    
    • 1
    • 2
    //也能指定查找的起点
            System.out.println(str.indexOf("abc",4));
    
    • 1
    • 2

    🎈lastIndexOf()

            System.out.println(str.lastIndexOf('c'));
    
    • 1

    从后往前找遇到第一个返回其下标

    //也能指定查找的起点
            System.out.println(str.lastIndexOf('c',4));
            //也能找字符串
            System.out.println(str.lastIndexOf("abc"));
            System.out.println(str.lastIndexOf("abc",3));
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果找不到:返回-1

    String str="ababcabcd";
    System.out.println(str.lastIndexOf("abc",3));
    
    • 1
    • 2
    2
    
    • 1

    ⭐关于String[] args

    public static void main(String[] args) {
            for (int i = 0; i < args.length; i++) {
                System.out.println(args[i]);
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    运行结果为空。

    我们需要对args数组传参数,通过命令行来传。
    在这里插入图片描述

    ⭐转化

    🎈数值和字符串之间的转换

    🔥valueOf()

    //整数转字符串
    String str=String.valueOf(123);
    System.out.println(str);
    //布尔类型转字符串
    String str2=String.valueOf(true);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    学生类转字符串

    class Student{
        public String name;
        public int age;
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    }
    @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
     String s4 = String.valueOf(new Student("Hanmeimei", 18));
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    Student{name='Hanmeimei', age=18}
    
    • 1

    🔥parseInt()

    int val=Integer.parseInt("123");
    int val=Integer.valueOf("123");
    double val2=Double.parseDouble("12.25");
    
    • 1
    • 2
    • 3

    🎈大小写转换

    🔥toUpperCase()

    小写转大写
    //只认小写字母,不是小写字母不操作
    String str="helloGT高";
    String ret=str.toUpperCase();
    
    • 1
    • 2
    • 3
    • 4

    🔥toLowerCase()

    大写转小写
    String str2="ABCDEFG";
    String ret2=str2.toLowerCase();
    
    • 1
    • 2
    • 3

    注意:字符串中的库函数都是返回新字符串,不在原字符串上修改

    🎈字符串转数组

    🔥toCharArray()

    char[] chars=str2.toCharArray();
    System.out.println(Arrays.toString(chars));
    
    • 1
    • 2

    🎈格式化

    🔥format()

    String ret3=String.format("%d,%d,%d",2012,12,12);
            System.out.println(ret3);
    
    • 1
    • 2
    2012,12,12
    
    • 1

    ⭐字符串替换

    🎈replace()

    在这里插入图片描述

    🔥replace(char oldChar,char newChar)

    在这里插入图片描述

    pbpbcpbcdpbcdef
    
    • 1

    🔥replace(CharSequence target,CharSequence replacement)

    在这里插入图片描述

    pkpkcpkcdpkcdef
    
    • 1

    🔥replaceAll()

    String ret=str1.replaceAll("abc","pkrg");
            System.out.println(ret);
    
    • 1
    • 2
    abpkrgpkrgdpkrgdef
    
    • 1

    🔥replaceFirst()

    String ret3=str1.replaceFirst("abc","pkrg");
            System.out.println(ret3);
    
    • 1
    • 2
    abpkrgabcdabcdef
    
    • 1

    ⭐字符串拆分

    🎈split()

    返回字符串数组

    🔥String[] split(String regex)

    String str="zhangsan&wangwu&lisi&zhaoliu";
    String[] ret=str.split("&");
    System.out.println(Arrays.toString(ret));
    
    • 1
    • 2
    • 3
    [zhangsan, wangwu, lisi, zhaoliu]
    
    • 1

    🔥String[] split(String regex, int limit)

    拆分成limit组

    String[] ret=str.split("&",2); System.out.println(Arrays.toString(ret));
    
    • 1
    [zhangsan, wangwu&lisi&zhaoliu]
    
    • 1
    一个例子
    String str2="127.0.0.1";
            String[] ret2=str2.split("\\.");
            for (String x:ret2) {
                System.out.println(x);
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    127
    0
    0
    1
    
    • 1
    • 2
    • 3
    • 4
    String str3="127\\0\\0\\1";
    String[] ret3=str3.split("\\\\");
    for (String x:ret3) {
          System.out.println(x);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    127
    0
    0
    1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    String str3="127\\0\\0\\1";
            String[] ret4=str3.split("/");
            for (String x:ret4) {
                System.out.println(x);
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    127\0\0\1
    //没有分割
    
    • 1
    • 2

    多种分隔符的情况:两个分隔符用’|'连接

    String str4="name=zhangsan&age=18";
            String[] ret5=str4.split("=|&");
            for (String x:ret5) {
                System.out.println(x);
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    name
    zhangsan
    age
    18
    
    • 1
    • 2
    • 3
    • 4

    多次拆分:

    String str4="name=zhangsan&age=18";
            String[] ret5=str4.split("&");
            for (String x:ret5) {
                String[] ss=x.split("=");
                for (String s:ss) {
                    System.out.println(s);
                }
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    name
    zhangsan
    age
    18
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    ⭐字符串截取

    🎈substring()

    在这里插入图片描述

    String str="helloworld";
            String ret=str.substring(1);
            System.out.println(ret);
            String ret1=str.substring(1,4);//[1,4)
            System.out.println(ret1);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    elloworld
    ell
    
    • 1
    • 2

    ⭐去掉空格

    🎈trim()

    去掉字符串左右两边的空格

    String str="  hello  hello       ";
            String ret=str.trim();
            //System.out.print(str);
            System.out.print(ret);
            System.out.println("ppppp");
    
    • 1
    • 2
    • 3
    • 4
    • 5
    hello  helloppppp
    
    • 1

    ⭐判断是否包含子串

    🎈contains()

    String str="  hello  hello       ";
    Boolean flg=str.contains("hello");
    System.out.println(flg);
    
    • 1
    • 2
    • 3
    true
    
    • 1

    ⭐判断是否以某字符串结尾

    🎈endsWith()

    String str ="abcabcdabcdef";
    System.out.println(str.endsWith("cdef9"));
    System.out.println(str.startsWith("abc"));
    
    • 1
    • 2
    • 3
    false
    true
    
    • 1
    • 2

    ⭐字符串常量池

    底层是一个StringTable的哈希表。

    String str1="abcd";
            String str2="abcd";
            String str3=new String("abcd");
            String str4=new String("abcd");
            System.out.println(str1==str2);
            System.out.println(str3==str4);
            System.out.println(str1==str3);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    true
    false
    false
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    public static void main(String[] args) {
            String str1="abc"+"def";
            }
            str1在编译阶段就是"abcdef"
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    ⭐intern方法

    手动将创建的String对象添加到常量池中。

    char[] ch = new char[]{'a', 'b', 'c'};
            String s1 = new String(ch);
            //s1.intern();
            String s2 = "abc";
            System.out.println(s1 == s2);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    不加s1.intern(); 输出false
    加了之后输出true
    
    • 1
    • 2

    在这里插入图片描述

    在这里插入图片描述

    ⭐字符串的不可变性

    在这里插入图片描述

    ⭐字符串修改

    long start = System.currentTimeMillis();
     String s = ""; 
     for(int i = 0; i < 100; ++i)
     { 
        s += i; //每次都会产生新的字符串,不会在原字符串上修改
     }
     long end = System.currentTimeMillis(); 
     System.out.println(end - start);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    ⭐StringBuilder

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    🎈reverse()

    StringBuilder stringBuilder=new StringBuilder("hello");
            stringBuilder.reverse();
            System.out.println(stringBuilder);
    
    • 1
    • 2
    • 3
    olleh
    
    • 1

    在这里插入图片描述
    String==》StringBuilder:调用StringBuilder的构造方法或StringBuilder.append()。
    StringBuilder==》String:StringBuilder.toString()。

    ⭐StringBuilder和StringBuffer的区别

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    集合练习题
    01背包问题
    C# 进行 Starlink 仿真02:先搞个小型 Walker 星座 ===> 创建“十字形”星间链路(升轨、降轨采用不同颜色)
    抑制细胞代谢紊乱的抑制剂
    阿里云服务器全方位介绍_优势_使用场景_限制说明
    无穷逻辑介绍
    使用GROUP BY分组
    如何安装nvm管理node版本
    C++ 数组
    TalkingData数据统计:洞察与应用
  • 原文地址:https://blog.csdn.net/qq_63983125/article/details/126485830