string类的特点及使用

String类

实例化方式

一、直接赋值
String str=“hello”;
直接赋值后,字符串在堆中的常量池中。
二、构造方法:
String str1=new String(“hello”);
对象引用,字符串在堆上。
使用构造方法会产生两块堆内存空间,其中一块被称为垃圾空间,并且不会自动入池,需要使用intern()手动入池。
String str1=new String(“hello”).intern();
String str=“hello”;
System.out.println(str==str1);
// 代码结果为true,使用intern将str1中的hello手动入池放进了常量池。

比较字符串是否相等

1、使用equals()方法比较:
条件:当比较对象为引用类型的时候,比较的是当前对象的内容。
根据以下两种比较字符串相等的写法,第一种会出现false ,
而第二种出现NullPointerException错误,所以建议以后写比较时使用字符串在前的方法。
String str=null;
System.out.println( “hello”.equals(str));
System.out.println( str.equals(“hello”);

2、使用==比较:

比较的是当前对象的地址。
(1)、
String str=“hello”;
String str1=“hello”;
System.out.println(str==str1);
//代码的结果为true,因为直接赋值的字符串存在常量池里,
// 而str和str1在栈上,当hello放入常量池时,str存的是hello当前的地址,
// 当把str1的hello向常量池中放时,会检测到常量池中有hello存在,然后把hello的地址返回给str1
****

(2)、
String str=“hello”;
String str1=new String(“hello”);
System.out.println(str==str1);
//代码运行结果为false,因为str为直接赋值,所以str内所存的地址为字符串存在常量池里的地址, 而str1通过引用对象得到的数值为对象在堆上地址。

注意:

由于使用对象引用会产生大量的垃圾空间,所以在使用字符串时,我们采用直接赋值的方法,减少内存空间的浪费。

字符与字符串

1、将字符串变为字符数组:
String str=“asda”;
char[] arr=str.toCharArray();
2、将字符数组变为字符串:
System.out.println(new String(arr));//将arr的内容全部变为字符串
System.out.println(new String(arr,1,2));//将arr中从1号下标开始往后数两个字符,将其变为字符串。
3、取得字符串指定位置的索引字符
String str=“asdahu”;
System.out.println(str.charAt(2));//索引从0开始。
4、将字符串的部分内容变为字符
String str=“asda”;
System.out.println(str.charAt(2));//将字符串的第二的字符变成字符。

字符串比较:

1、分大小写
String str=“abcde”;
String str1=“Abcde”;
System.out.println(str.equals(str1));
//结果为false,
2、不分大小写
String str=“abcde”;
String str1=“Abcde”;
System.out.println(str.equalsIgnoreCase(str1));
//结果为true,
3、比较字符串大小
比较的是从0号下标开始的第一个不相同的字符的Asscil的值,小写字母大于大写字母。
(1)、String str=“abcde”;
String str1=“Abcde”;
System.out.println(str.compareTo(str1));
//结果为32,
(2)、String str=“abcde”;
String str1=“Abcde”;
System.out.println(str1.compareTo(str));
//结果为-32
所以得出比较是用compareTo前面的字符减去compareTo后面的字符。
(3)、String str=“abcde”;
String str1=“aBce”;
System.out.println(str1.compareTo(str));
//结果为-32,
加粗样式所以得出,比较是从第一个不相同的字符开始比较,和后面的无关。

字符串查找:

1、判断一个子字符串是否存在
String str=“abcde”;
System.out.println(str.contains(“bc”));//结果为true。
2、从头开始查找指定字符串的位置,找到返回索引位置,找不到返回-1;
String str=“abcde”;
System.out.println(str.indexOf(“de”));\结果为3,找到了

String str=“abcde”;
System.out.println(str.indexOf("f“));\结果为-1,没找到
3、从指定位置开始查找指定字符串,找到返回索引位置,找不到返回-1;
String str=“abcde”;
System.out.println(str.indexOf(“d”,1));//找到了,结果为3.
4、从后往前查找指定字符串,找到返回索引位置,找不到返回-1;
String str=“abcde”;
System.out.println(str.lastIndexOf(“b”));//找到了,结果为1
5、从指定位置开始从后往前查找指定字符串,找到返回索引位置,找不到返回-1;
String str=“abcde”;
System.out.println(str.lastIndexOf(“b”,5));//找到了,结果为1
6、判断是否以指定字符串开头
String str=“abcde”;
System.out.println(str.startsWith(“b”));//结果false
String str=“abcde”;
System.out.println(str.startsWith(“a”));//结果true.
7、以指定位置开始判断是否以指定字符串为开头
String str=“abcde”;
System.out.println(str.startsWith(“bc”,1));//结果为true
8、判断是否以指定字符串结尾
String str=“abcde”;
System.out.println(str.endsWith(“e”));//结果为true

字符串的替换

1、替换所有指定内容:
String str=“abcdefgh”;
System.out.println(str.replaceAll(“bc”,“BBBB”));//将bc替换为BBBB
String str=“abccdefgh”;
System.out.println(str.replaceAll(“c”,“BBBB”));//将c替换为BBBB,所以结果为abBBBBBBBBdefgh
2、替换首个内容:
String str=“abccdefgh”;
System.out.println(str.replaceFirst(“c”,“BBBB”));//结果为abBBBBcdefgh,只替换了第一个c。

字符拆分

1、将字符串全部拆分
String str=“i am a student”;
String[] result=str.split(" “);
for (String s:result){
System.out.println(s);
}
结果将i am a student 以空格为界限拆分为四个字符串。
2、将字符串部分拆分,
String str=“i am a student”;
String[] result=str.split(” ",2);
for (String s:result){
System.out.println(s);
}
结果将i am a student 以空格为界限拆分为两个字符串,为:i和am a student,两部分。
注意:如果有些内容无法拆分则需要转义字符。

字符截取

1、从指定索引截取到结尾
String str=“iamastudent”;
System.out.println(str.substring(5));
结果为tudent,
2、截取部分内容
String str=“iamastudent”;
System.out.println(str.substring(1,5));
结果为amas ,从1号位置截取到5号位置

字符串的拼接

String str=“i”;
str=str+“am”;
str=str+“a”;
str=str+“student”;
System.out.println(str);
结果:iamastudent
但是使用该方法拼接,会产生大量的对象引用,造成内存浪费,所以,要拼接字符串使用StringBuffer会更好。

字符串大写转小写和小写转大写

1、小写转大写
String str=“iamastudent”;
System.out.println(str.toUpperCase());//结果为IAMASTUDENT
2、大写转小写
String str1=“IAMASTUDENT”;
System.out.println(str.toLowerCase());//结果为iamastudent

注意:String声明常量后不可修改,如果改变对象的内容,改变的不过是对象引用的指向
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值