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