• 38、常用类之String类


    目录

    一、String类 

    二、StringBuffer类

    三、StringBuilder类


    一、String类 

    1、基本介绍:

    • ·String s5=new String(byte[] b);
    • String类具有以下特性:

      • 不可变性(Immutable): String对象一旦创建,其内容就不能被修改。任何对String对象的操作都会创建一个新的String对象,原始对象保持不变。这样的设计使得String在多线程环境下更加安全,因为它们不可变,不会被其他线程修改。

      • 字符串池(String Pool): Java中的字符串池是一种特殊的内存区域,用于存储字符串常量。当创建一个新的字符串常量时,JVM会首先检查字符串池,如果池中已存在相同内容的字符串,则返回池中的引用,否则会在池中创建一个新的字符串并返回引用。这可以节省内存空间,提高性能。

      • 性能优化: 由于String的不可变性,一些常用的字符串操作(如拼接、截取、替换等)会通过创建新的String对象来实现,这可能会导致内存和性能方面的开销。为了优化性能,Java提供了StringBuilder和StringBuffer等可变的字符串类,用于频繁修改字符串内容。

      • 重载了"+"操作符: String类重载了"+"操作符,使得字符串可以通过"+"连接起来,形成新的字符串。

      • 支持正则表达式: String类提供了丰富的正则表达式支持,可以进行模式匹配、查找和替换等操作。

      • Unicode支持: String类支持Unicode字符集,可以表示世界上几乎所有的字符。

      • equals()方法重写: String类重写了equals()方法,用于比较两个字符串的内容是否相等。

      • hashCode()方法重写: String类重写了hashCode()方法,用于计算字符串的哈希码,可以用于哈希表等数据结构中。

    2、String类的常见方法:

    1. package String_;
    2. public class String01 {
    3. public static void main(String[] args) {
    4. String str1="hello";
    5. String str2="Hello";
    6. System.out.println(str1.equals(str2));//f, equals方法比较内容是否相同,区分大小写
    7. System.out.println(str1.equalsIgnoreCase(str2));//t, equalsIgnoreCase方法比较内容是否相同,不区分大小写
    8. System.out.println(str1.indexOf('e'));//输出:1,该字符第一次出现的地址
    9. System.out.println(str1.lastIndexOf('e'));//输出:1,该字符最后一次出现的地址
    10. System.out.println(str1.indexOf("el"));//输出:1,也可以是查找字符串第一个字母的地址
    11. System.out.println(str1.lastIndexOf("el"));//输出:1,查找字符串第一个字母最后一次出现的地址
    12. System.out.println(str1.substring(2));//输出:llo,截取索引2后面所有的字符
    13. System.out.println(str1.substring(0,2));//输出:he,截取索引为0到索引为2的所有字符
    14. }
    15. }

     

    1. package String_;
    2. public class String01 {
    3. public static void main(String[] args) {
    4. String s="hello";
    5. System.out.println(s.toUpperCase());//HELLO
    6. System.out.println(s.toLowerCase());//hello
    7. s=s.concat(" cheer ").concat(" up ").concat("TV");
    8. System.out.println(s);//hello cheer up TV
    9. System.out.println(s.replace("cheer","CHEER"));//hello CHEER up TV
    10. //注意:s.replace()方法执行后对原来的s没有任何影响
    11. String poem="锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";
    12. String[] split=poem.split(",");//以逗号为标准对poem进行分割,返回一个数组
    13. for(int i=0;i
    14. System.out.println(split[i]);
    15. }
    16. //输出:
    17. //锄禾日当午
    18. //汗滴禾下土
    19. //谁知盘中餐
    20. //粒粒皆辛苦
    21. //注意:在对字符串进行分割时,如果有特殊字符,需要加入转义字符\
    22. //如要以"\\"为标准分割,那应该是String[] split=poem.split("\\\\");
    23. //因为一个\对应一个\,两个\\加起来就一共是\\\\个了
    24. char[] ch=s.toCharArray();//把字符串转换成字符数组
    25. for(int i=0;i
    26. System.out.println(ch[i]);
    27. }
    28. String s1="hello";
    29. String s2="hi";
    30. System.out.println(s1.compareTo(s2));//输出:-4 //因为e-i=-4
    31. //前>后,返回正数;后>前,返回负数,前=后,返回0
    32. String s3="hello";
    33. String s4="h";
    34. System.out.println(s3.compareTo(s4));//输出:4 //因为s3.length-s4.length=4
    35. //如果前面部分都相同,如hello和he比较,则是则返回的是字符串长度的差
    36. }
    37. }
    1. package String_;
    2. public class String01 {
    3. public static void main(String[] args) {
    4. String name="tom";
    5. int age=10;
    6. double score=98.8;
    7. char gender='男';
    8. String s="姓名:%s,年龄:%d,成绩:%.2f,性别:%c";//占位符,由后面的变量来替换
    9. System.out.println(String.format(s,name,age,score,gender));
    10. //输出:姓名:tom,年龄:10,成绩:98.80,性别:男
    11. }
    12. }

    二、StringBuffer类

    1、基础知识 

    • 1)java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删
    • 2)很多方法与String相同,但StringBuffer是可变长度的
    • 3)StringBuffer是一个容器
    • 4)StringBuffer的直接父类是AbstractStringBuilder
    • 5)StringBuffer实现了Serializable, 说明StringBuffer可以串行化,即可以网络传输
    • 6)父类AbstractStringBuilder有属性char[] value,不是final,该value数组存放字符串内容,引出的是存放在堆中的(不再是常量池)
    • 7)StringBuffer是一个final类,不能被继承

    2、构造方法 

    1. StringBuffer stringBuffer=new StringBuffer();
    2. StringBuffer stringBuffer1=new StringBuffer(100);
    3. StringBuffer stringBuffer2=new StringBuffer("hello");

    3、常见方法 

    1. package String_;
    2. public class String01 {
    3. public static void main(String[] args) {
    4. StringBuffer s=new StringBuffer("hello");
    5. s.append(" h");
    6. s.append("i").append(" 100").append(true).append(10.5);//追加
    7. System.out.println(s);//hello hi 100true10.5
    8. s.delete(2,3);//删除
    9. System.out.println(s);//helo hi 100true10.5
    10. s.replace(0,5,"cheer");//替换
    11. System.out.println(s);//cheerhi 100true10.5
    12. s.indexOf("c");//查找
    13. System.out.println(s);//输出:0
    14. s.insert(5," up! ");//增加
    15. System.out.println(s);//输出:cheer up! hi 100true10.5
    16. }
    17. }

    4、String 和StringBuffer的区别 

    三、StringBuilder类

    • 1)是一个可变的字符序列,此类提供一个与StringBuffer兼容的API,但不保证同步(StringBuilder不是线程安全),该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用时,如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer要快
    • 2)在StringBuilder上的主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据
    •  3)StringBuilder和StringBuffer均代表可变的字符序列,方法是一样的,所以使用和StringBuffer一样
    • 4)StringBuilder是final
    • 5)继承了AbstractStringBuilder,属性char[] value,内容存到value,因此字符序列是在堆中
    • 6)实现了Serializable接口,StringBuilder对象可以串行化,即可以网络传输,可以保存到文件。序列化(所谓序列化即可以保存类型和数据本身)
    • 7)StringBuilder的方法,没有做互斥处理,即没有synchronized关键字,因此在单线程的情况下使用

     

  • 相关阅读:
    指纹浏览器开发指南-EasyBR
    以太网帧间隙IFG详解(Interframe Gap帧间距)
    基于单片机的线路差动保护系统设计
    Python学习:自动生成Mysql建表语句
    Jetson Nano上jtop(jetson_stats.service)不能运行
    linux wc命令
    MySQL的索引B+树及MySQL日志:binlog、redolog、undolog讲解
    企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
    Vue组件自定义事件
    Codeforces Round #821 (Div. 2) A~C(模拟、构造)
  • 原文地址:https://blog.csdn.net/weixin_72052233/article/details/127943426