0基础学java之Day20

字符串类

分类:

  • String

  • StringBuffer

  • StringBuilder

String的使用

复制代码
        String str = "123abc";
        
        str = str.concat("DEF123");//拼接字符串,返回新的字符串
        str = str.substring(2);//从指定下标处截取到字符串末尾,返回新的字符串
        str = str.substring(2, 7);//从开始下标处(包含)截取到结束下标处(排他),返回新的字符串
        
        str = str.toUpperCase();//转大写,返回新的字符串
        str = str.toLowerCase();//转小写,返回新的字符串
        
        str = "   123 ab cD   EF   12  3            ";
        
        str = str.trim();//去除首尾空格,返回新的字符串
        str = str.replace('c', 'C');//替换字符,返回新的字符串
        str = str.replace("12", "666888");//替换字符串,返回新的字符串
        str = str.replaceAll("666", "123");//替换字符串,返回新的字符串 -- 该方法支持正则表达式
        str = str.replaceFirst("123", "xxxyyy");//替换第一个符合的字符串,返回新的字符串
        str = str.replaceAll(" ", "");//去除空格 - 将空格替换成空内容的字符串,返回新的字符串
        
        System.out.println("判断两个字符串内容是否相同(区分大小写):" + str.equals("xxxyyy8883abCDEF1238883"));//true
        System.out.println("判断两个字符串内容是否相同(不区分大小写):" + str.equalsIgnoreCase("xXxyYy8883abCDEF1238883"));//true
        
        System.out.println("判断字符串是否以某个字符串开头:" + str.startsWith("xxx"));//true
        System.out.println("判断字符串是否以某个字符串结尾:" + str.endsWith("1238883"));//true
        
        System.out.println("获取第一次出现字符的下标:" + str.indexOf('a'));//10
        System.out.println("获取第一次出现字符串的下标:" + str.indexOf("888"));//6
        System.out.println("获取最后一次出现字符串的下标:" + str.lastIndexOf("888"));//19
        System.out.println("获取指定下标上的字符:" + str.charAt(10));//a
        
        System.out.println(str);//xxxyyy8883abCDEF1238883
        
        //将其他类型转换为字符串类型
        System.out.println(String.valueOf(100));//int -> String
        System.out.println(String.valueOf(123.123));//double -> String
        System.out.println(String.valueOf('a'));//char -> String
        System.out.println(String.valueOf(true));//boolean -> String
        
        //将其他类型转换为字符串类型 -- 更简单的写法
        System.out.println(100 + "");//int -> String
        System.out.println(123.123 + "");//double -> String
        System.out.println('a' + "");//char -> String
        System.out.println(true + "");//boolean -> String
        
    }
​

String的深入

复制代码
public static void main(String[] args) {
        
        //面试题1:下列代码会创建几个String对象
        //答:会创建1个String对象
        String str1 = "abc";
        String str2 = "abc";
        System.out.println(str1 == str2);//true
        
        //面试题2:下列代码会创建几个String对象
        //答:会创建3个String对象
        String str1 = new String("abc");
        String str2 = new String("abc");
        System.out.println(str1 == str2);//false
    }
​
​
​
​
​
public static void main(String[] args) {
        
        String str1 = "abc";
        String str2 = "abc";
        System.out.println(str1 == str2);//true
        
        //注意:常量在编译时直接拼接
        String str3 = "ab" + "c";
        System.out.println(str1 == str3);//true
        
        //注意:常量在编译时直接拼接
        final String s1 = "ab";
        final String s2 = "c";
        String str4 = s1 + s2;
        System.out.println(str1 == str4);//true
    
        String s3 = "ab";
        String s4 = "c";
        String str5 = s3+s4;//String str5 = (new StringBuilder(String.valueOf(s3))).append(s4).toString();
        System.out.println(str1 == str5);//false
    
    }
​

StringBuffer的使用

复制代码
public static void main(String[] args) {
        
        //底层:16个长度的字符数组 -- 容器
        //StringBuffer sb = new StringBuffer();
        
        //底层:32个长度的字符数组 -- 容器
        //StringBuffer sb = new StringBuffer(32);
        
        //底层:"123abc".length() + 16个长度的字符数组 -- 容器
        StringBuffer sb = new StringBuffer("123abc");
        
        sb.append("DEF123");//追加末尾字符串
        sb.insert(6, "xxxyyyzzz");//在指定下标处插入字符串
        sb.setCharAt(3, 'A');//替换指定下标上的字符
        sb.deleteCharAt(3);//删除指定下标上的字符
        sb.delete(3, 17);//从开始下标处(包含)删除结束处(排他)的字符串
        sb.replace(1, 4, "用良心做教育");//从开始下标处(包含)替换结束处(排他)的字符串
        sb.reverse();//反转字符串
        
        System.out.println(sb.toString());//32育教做心良用1
​
    }
​

StringBuilder的使用

复制代码
注意:
            1.StringBuffer和StringBuilder都是继承于AbstractStringBuilder,底层所有功能够依赖于父类(功能一样)
            2.StringBuffer是在父类的基础上加了线程安全的代码,所以多线程的情况下使用
            3.StringBuilder是没有线程安全的代码,所以在单线程的情况下使用
相关推荐
金銀銅鐵1 小时前
带您看懂字节码指令(一):一帧里有什么
java·后端·ai编程
nice_lcj5203 小时前
【从零理解 Spring AI · 14】RAG 的四个环节:加载、切分、向量化、检索
java·spring boot·embedding·向量数据库·rag·spring ai·ai应用开发
学长毕设5 小时前
基于springboot科创竞赛信息平台-附源码
java·spring boot·后端
聪明的笨猪猪5 小时前
Java 工程案例:AI 生成 @Async 异步线程池踩坑
java·经验分享·面试·ai编程
学长毕设6 小时前
基于SpringBoot公务员考试交流平台-附源码
java·spring boot·后端
SL_staff8 小时前
私有化低代码:面向强监管行业的可控数字化实践
java·低代码
三翼鸟数字化技术团队9 小时前
高性能存储引擎RocksDB:原理与Java生态实践
java
SL_staff9 小时前
JVS-APS有限产能建模的七个刚性支点:面向产线真实约束的技术实现解析
java·开源·全栈
特立独行的猫A9 小时前
少 3 个环节、少 1 次 ABI、少 3500 行代码:cj-tauri 与 Ionic/Capacitor 的鸿蒙桥接机制对比
java·后端·python
学长毕设9 小时前
基于SpringBoot的高校后勤报修管理系统-附源码
java·spring boot·后端