String类
String是Java API 提供的一个类,它表示字符串的意思。
1.Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现.
"abc"就是一个字符串对象
2.Java的字符串是常量,一旦创建不能更改。
指的是字符串在内存中的值不能更改。字符串本身不可更改,但其所在地址内的东西是可以被替换的
使用构造方法创建String对象
String str = "abc";
等效于:
char data[] = {'a', 'b', 'c'};
String str = new String(data);
故我们在调用 String 里的方法时无需单独创建 String 类的对象
//创建一个空的字符串对象
String s1=new String();
System.out.println(s1); //什么也没有(看不见任何字符)
char[] chs={'a','b','c','e','f'};
//利用字符数组创建String对象
String s2=new String(chs);
System.out.println(s2); //abcdef
//利用字符数组的一部分创建一个新的字符串,从0索引开始,拿3个字符
String s3=new String(chs,0,3);
System.out.println(s3); //abc
System.out.println("-------------------");
//利用字节数组创建一个String对象
byte[] bs={97,98,99,100,101,102};
String s4=new String(bs);
System.out.println(s4); //abcdef
//利用字节数组的一部分创建string对象,从3索引开始,拿3个字节
String s5=new String(bs,3,3);
System.out.println(s5); //def
基本数据类型里只有 char 和 byte 数据类型的数组可以创建 String 对象
两种字符串对象的区别
String s1="abc";
String s2="abc";
System.out.println(s1==s2); //true,字符串常量存储在常量池中,s2会复用s1的地址
String s3=new String("abc");
String s4=new String("abc");
System.out.println(s3==s4); //false,每次new一个String对象,都会重新在堆内存开辟空间。
字符串的常见面试题
String s1="abc";
String s2="abc";
System.out.println(s1==s2); //true
String s3="abcdef";
String s4=s2+"def"; //字符串 “变量” 左拼接,会生成一个新的字符串,对应的地址会改变
System.out.println(s3==s4); //false
String s5="abc";
String s6="a"+"b"+"c"; //在编译时 "a"+"b"+"c"转换为"abc" 字符串 “常量” 的拼接不会产生新的字符串
System.out.println(s5==s6);//true
字符串的常见方法
比较相等的方法
public boolean equals(Object anObject)//String类里的 equals 用于对比字符串的内容,==用于比较地址
用来比较两个字符串的内容是否相等
public boolean equalsIgnoreCase(String anotherString)
用来比较两个字符串的内容是否相等,不考虑大小写。
代码演示
String s1 = "helloworld";
String s2 = new String("helloworld");
//比较地址
System.out.println(s1 == s2); //false
//比较内容
boolean f1 = s1.equals(s2);
System.out.println(f1); //true
boolean f2 = s2.equals(s1);
System.out.println(f2); //true
字符串遍历
遍历字符串可以用到下面的几个方法。
public int length()
获取字符串的长度
public char charAt(int index)
获取字符串中指定索引位置的字符
public char[] toCharArray()
把字符串转换为字符数组
public class StringDemo3{
public static void main(String[] args){
String s="键盘敲烂,月薪过万";
//遍历方式1
//快捷键:s.length().fori
for(int i=0;i<s.length();i++){
char ch= s.charAt(i);
System.out.println(ch);
}
//遍历方式2
char[] chs=s.toCharArray();
for(int i=0;i<chs.length;i++){
System.out.println(chs[i]);
}
}
}
字符串的截取
手机号码屏蔽,需要对号码进行截取。String类提供了对字符串进行截取的方法
public String substring(int index)
从指定的索引位置截取到字符串的末尾
public String substring(int start,int end)
从指定的开始索引位置截取到指定的结束索引位置。(包含头,不包含尾)
public class Test03 {
public static void main(String[] args) {
String s1="abc123ADF098"; //定义字符串
String result1=s1.substring(3); //123ADF098
String result2=s1.substring(3,12); //123ADF098 第二个索引值对应的字符不输出,故未报错
}
}
替换字符串
String类提供了对字符串进行替换的方法。可以用字符串替换的方法做敏感词过滤。
public String replace(String oldStr,String newStr)
使用新的字符串替换旧的字符串
public class Test03 {
public static void main(String[] args) {
String s1="兄弟姐妹";
String s2=s1.replace("弟姐妹","兄兄兄");
System.out.println(s1); //兄弟姐妹
System.out.println(s2); //兄兄兄兄
}
} //可以看出 s1 并没有改变,只是利用 s1 创建了一个新的字符串 s2
字符串的切割
String类提供了对字符串进行切割的方法。一个字符串切割之后,可以变成多个字符串,使用数组来存储。
public String[] split(String regex)
根据指定的字符串来切割字符串
注意:不能使用"."进行切割,因为"."表示任意字符;
如果真的需要用点进行切割,使用"\\."
public class StringDemo5 {
public static void main(String[] args) {
String str="www,itheima,com";
//使用","对字符串进行切割
String[] arr = str.split(",");
//遍历字符串数组
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
StringBuilder类
StringBuilder是一个字符串缓冲区(理解成一个容器),它可以存储任意类型的数据,最终都会变成字符串。
public StringBuilder append(任意类型的数据)
往缓冲区中添加任意类型的数据。返回StringBuilder容器本身
public String toString()
把字符串缓冲区转换为字符串
public StringBuilder reverse()
对缓冲区的内容进行反转
public StringBuilder repalce(int start,int end,String str)
将指定区间的数据替换为指定字符串