Java——String类

1.String常用方法

1.1三种常用构造方法

1.        String s1="hello";

2.        String s2=new String("world");

3.      char []str={'h','e','l','l','o',' ','w','o','r','l','d'};
        String s3=new String(str);

1.2String对象的比较

==比较

对于内置类型来说,“==”比较的是两端变量存储的值是否相同

对于引用类型来说,“==”比较的是两端变量指向的地址值是否相同

对于内置类型来说,存储的内容在栈区

对于引用类型来说,存储的内容在堆区,而栈区存储的是堆区对象的地址

这样一来“==”就是比较的是栈区的内容


equals比较

在String类当中,重写了Object类中的equals方法,Object类中的equals方法默认是使用==进行比较的,返回值为boolean类型

equals方法的使用格式:

对象1.equals(对象2)

String类中equals方法的比较规则

1.判断对象1和对象2是否为同一对象,是就返回true

2.判断对象2是否为String类型的对象,是就继续比较,不是就返回false

3.获取对象1和对象2的长度,相同就继续比较,否则返回false

4.按字典序进行比较,从前往后挨个比较


compareTo比较

与equals不同的是,compareTo的返回值是int类型

对象1.compareTo(对象2)

String类中compareTo的比较规则:

从前往后依次比较,遇见不同返回对象1与对象2对应字符的差值,如果对象1比较完了,返回两个字符串相差的字符数,如果对象2比较完了,则返回两者字符串相差的字符数的相反数


compareToIgnoreCase比较

与compareTo的比较方式相同,但是忽略了大小写

1.3字符串查找

char charAt(int index)

index为需要查找的字符串的下标,返回该下标的字符,如果越界访问,则抛出IndexOutOfBoundsException异常


indexOf

indexOf提供了多种重载方法

indexOf是查找某个字符或字符串从0下标或从指定下标开始,返回第一次出现位置的下标


lastIndexOf

lastIndex与index的重载参数列表和返回值完全相同

lastIndexOf是从后往前查,返回目标值第一次出现的下标

1.4转化

1.4.1各种数据类型转换为字符串

valueOf

字符串转数字(parse和valueOf)

        int a=Integer.valueOf("10");
        System.out.println(a);
        int a1=Integer.parseInt("100");
        System.out.println(a1);
        double b=Double.valueOf("11.21");
        System.out.println(b);
        double b1=Double.parseDouble("112.12");
        System.out.println(b1);

1.4.2大小写转换

转小写:toLowerCase

转大写:toUpperCase

        String str1="Hello";
        String str2="World";
        System.out.println(str1.toLowerCase());//大写转小写
        System.out.println(str2.toUpperCase());//小写转大写

1.4.3字符串转数组

toCharArray

        String str1="Hello";
char []str0= str1.toCharArray();

1.5格式化

format

System.out.println(String.format("%d年%d月%d日",2024,5,30));

1.6字符串的替换

替换所有:replaceAll

替换首个:replacFirst

String str6="hhhhashaadhahhasshhh";
String str7="AAAAAAAAAAAdasadsdd";
        str6.replaceAll("h","H");//将str6中的所有“h”替换为“H”
        str7.replaceFirst("AA","EE");//将str7中的首个“AA”替换为“EE”

1.7字符串分割

分割:split

   String str8="HHH0AAA0SSS0DDD0FFF";
        String[]ss1=str8.split("0");
        for (int i = 0; i < ss1.length ; i++) {
            System.out.println(ss1[i]);
        }

部分分割:split的第二个参数为分割几段

 String str8="HHH0AAA0SSS0DDD0FFF";
        String[]ss1=str8.split("0",2);
        for (int i = 0; i < ss1.length ; i++) {
            System.out.println(ss1[i]);
        }

注意事项:

1. 字符"|","*","+"都得加上转义字符,前面加上 "\\" .

2. 而如果是 "\" ,那么就得写成 "\\\\" .

3. 如果一个字符串中有多个分隔符,可以用"|"作为连字符

  String str8="HHH0AAA0SSKS0DDKD0FFF";
        String[]ss1=str8.split("0|K");
        for (int i = 0; i < ss1.length ; i++) {
            System.out.println(i+ss1[i]);
        }

1.8字符串的截取

字符串截取:substring

String str9="hello world";
        System.out.println(str9.substring(4));//截取从4下标开始后的字符串
        System.out.println(str9.substring(3,5));//截取从3下标开始,5下标结束的字符串,左闭右开

1.9去除字符串左右两端的空格

String str10="         weq weq eda eqew            ";
        System.out.println(str10.trim());

2.字符串的修改

注意:要尽量避免对String类型的对象进行修改,因为String类型的对象时不能修改的,所有Sting类型对象修改的结果都是需要创建新的String对象,这样效率是非常低下的

    public static void main(String[] args) {
        long start = System.currentTimeMillis();//获取当前时间戳,单位(毫秒)
        String s = "";
        for(int i = 0; i < 10000; ++i){
            s += i;
  }
 long end = System.currentTimeMillis();
 System.out.println(end - start);//运行的时间差
 start = System.currentTimeMillis();
 StringBuffer sbf = new StringBuffer("");
 for(int i = 0; i < 10000; ++i){
 sbf.append(i);
 }
 end = System.currentTimeMillis();
 System.out.println(end - start);
 start = System.currentTimeMillis();
 StringBuilder sbd = new StringBuilder();
 for(int i = 0; i < 10000; ++i){
 sbd.append(i);
 }
 end = System.currentTimeMillis();
 System.out.println(end - start);
    }

如果要频繁修改字符串的值,建议调用StringBuilder中的append方法,这个方法在使用时不会创建新的String类型对象

补充:字符串的不可变性

因为String类型的对象是不可被修改的,什么原因呢?


String类是被final修饰的

在String类里字符串是被byte类型的数组存储的

这个数组被final和private修饰

public final class String{
private final byte[] value;
}

final修饰的类是不可被继承的

final修饰的数组表示value这个变量指向的地址不能被修改,而地址指向的字符元素是可被修改的

字符串不可变性的真正原因是被private修饰,被private修饰的变量只能在本类中使用,而String里没有getter和setter方法,所以外界就不能对其修改

  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值