您的位置:首页 > 游戏 > 手游 > Java——String类

Java——String类

2024/11/18 7:37:57 来源:https://blog.csdn.net/2301_80251684/article/details/139322700  浏览:    关键词: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方法,所以外界就不能对其修改

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com