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类的常见方法:

package String_;
public class String01 {
    public static void main(String[] args) {
        String str1="hello";
        String str2="Hello";

        System.out.println(str1.equals(str2));//f, equals方法比较内容是否相同,区分大小写
        System.out.println(str1.equalsIgnoreCase(str2));//t, equalsIgnoreCase方法比较内容是否相同,不区分大小写

        System.out.println(str1.indexOf('e'));//输出:1,该字符第一次出现的地址
        System.out.println(str1.lastIndexOf('e'));//输出:1,该字符最后一次出现的地址

        System.out.println(str1.indexOf("el"));//输出:1,也可以是查找字符串第一个字母的地址
        System.out.println(str1.lastIndexOf("el"));//输出:1,查找字符串第一个字母最后一次出现的地址

        System.out.println(str1.substring(2));//输出:llo,截取索引2后面所有的字符
        System.out.println(str1.substring(0,2));//输出:he,截取索引为0到索引为2的所有字符
    }
}

 

package String_;
public class String01 {
    public static void main(String[] args) {
        String s="hello";

        System.out.println(s.toUpperCase());//HELLO
        System.out.println(s.toLowerCase());//hello

        s=s.concat(" cheer ").concat(" up ").concat("TV");
        System.out.println(s);//hello cheer  up TV
        System.out.println(s.replace("cheer","CHEER"));//hello CHEER  up TV
        //注意:s.replace()方法执行后对原来的s没有任何影响

        String poem="锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";
        String[] split=poem.split(",");//以逗号为标准对poem进行分割,返回一个数组
        for(int i=0;i<split.length;i++){
            System.out.println(split[i]);
        }
        //输出:
        //锄禾日当午
        //汗滴禾下土
        //谁知盘中餐
        //粒粒皆辛苦
        //注意:在对字符串进行分割时,如果有特殊字符,需要加入转义字符\
        //如要以"\\"为标准分割,那应该是String[] split=poem.split("\\\\");
        //因为一个\对应一个\,两个\\加起来就一共是\\\\个了

        char[] ch=s.toCharArray();//把字符串转换成字符数组
        for(int i=0;i<ch.length;i++){
            System.out.println(ch[i]);
        }

        String s1="hello";
        String s2="hi";
        System.out.println(s1.compareTo(s2));//输出:-4 //因为e-i=-4
        //前>后,返回正数;后>前,返回负数,前=后,返回0
        
        String s3="hello";
        String s4="h";
        System.out.println(s3.compareTo(s4));//输出:4  //因为s3.length-s4.length=4
        //如果前面部分都相同,如hello和he比较,则是则返回的是字符串长度的差
   }
}

package String_;
public class String01 {
    public static void main(String[] args) {
        String name="tom";
        int age=10;
        double score=98.8;
        char gender='男';
        String s="姓名:%s,年龄:%d,成绩:%.2f,性别:%c";//占位符,由后面的变量来替换
        System.out.println(String.format(s,name,age,score,gender));
        //输出:姓名:tom,年龄:10,成绩:98.80,性别:男
    }
}

二、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、构造方法 

StringBuffer stringBuffer=new StringBuffer();
StringBuffer stringBuffer1=new StringBuffer(100);
StringBuffer stringBuffer2=new StringBuffer("hello");

3、常见方法 

package String_;
public class String01 {
    public static void main(String[] args) {
        StringBuffer s=new StringBuffer("hello");
        s.append(" h");
        s.append("i").append(" 100").append(true).append(10.5);//追加
        System.out.println(s);//hello hi 100true10.5

        s.delete(2,3);//删除
        System.out.println(s);//helo hi 100true10.5

        s.replace(0,5,"cheer");//替换
        System.out.println(s);//cheerhi 100true10.5

        s.indexOf("c");//查找
        System.out.println(s);//输出:0

        s.insert(5," up! ");//增加
        System.out.println(s);//输出:cheer up! hi 100true10.5
    }
}

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关键字,因此在单线程的情况下使用

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

戏拈秃笔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值