String类
String类、StringBuilder类、StringBuffer类是三个字符串相关类。String类是的对象代表不可变的字符序列,StringBuilder类和StringBuffer类代表可变字符序列。
理解String类源码
-
String类底层是一个字符数组value。各种方法的操作其实都是对该数组的操作。
-
String类的equals()方法其实就是比较底层的字符数组的各个元素是否相同,只要发现一个字符不相同,就返回false。如果所有字符都相同,返回true。但是如果两个变量指向了同一个字符数组,直接返回true。
-
String类的concat()是创建一个新的字符数组,存放原来字符数组和新加入的字符数组内容,然后以该新数组创建一个新的字符串。
String类的使用(一):
package com.bisxt.string;
import java.lang.String;
import java.util.Arrays;
public class TestString1 {
public static void main(String[] args) {
//1.创建一个字符串对象
//String str = "张永昌";
String str = new String("张永昌abC");
//2.操作这个字符串对象
//2.1最基本的操作
System.out.println(str.length());//字符的个数而不是字节的个数
System.out.println(str.isEmpty());
System.out.println(str.startsWith("张"));
System.out.println(str.endsWith("b"));
System.out.println(str.toUpperCase());
System.out.println(str.toLowerCase());
//String是不可变字符序列,但是可以改变引用的指向
str=str.toLowerCase();
System.out.println(str);
str=str.toUpperCase();
System.out.println(str);
System.out.println(str.contains("张永昌ABC"));
//2.2根据索引确定字符串
//索引的范围是0-MaxLength
char ch=str.charAt(3);
System.out.println(ch);
String substr = str.substring(3, 6);
System.out.println(substr);
//2.3根据子串确定索引
int index = str.indexOf("A");
System.out.println(index);
str = "北京尚学堂bjsxtbjsxtbj";
index=str.indexOf("sxt",8);
System.out.println(index);//12
index = str.indexOf("sxt", 13);
System.out.println(index);//-1 表示不存在
//lastIndexOf表示从后往前找,但是索引顺序还与IndexOf一样,它们只是查找的方向不同
index = str.lastIndexOf("sxt");
System.out.println(index);//12
//2.4其他方法
str=str.replaceAll("bj","BJ");
System.out.println(str);//北京尚学堂BJsxtBJsxtBJ
str=" bj sxt ";
System.out.println(str.length());//14
str=str.trim();//trim()只能去掉两端的空格,字符串中间的空格去不掉
System.out.println(str.length());//7 "bj sxt"
//String--->byte[]
str = "北京尚学堂bjsxt";
byte[] bytes = str.getBytes();
System.out.println(bytes);//[B@4554617c
System.out.println(bytes.length);//20 =5*3+5即一个汉字在Utf-8编码中站三个字节,英文还是一个字节
System.out.println(Arrays.toString(bytes));//[-27, -116, -105, -28, -70, -84, -27, -80, -102, -27, -83, -90, -27, -96, -126, 98, 106, 115, 120, 116]
//String<---byte[]
String str2 = new String(bytes);
System.out.println(str2);//北京尚学堂bjsxt
str2 = new String(bytes, 6, 9);
System.out.println(str2);//尚学堂
}
}
String类的使用(二):
package com.bisxt.string;
public class TestString2 {
public static void main(String[] args) {
//1.创建一个字符串对象并进行字符串操作
String str1 = new String("bjsxt");
String str2 = new String("bjsxt");
System.out.println(str1==str2);//false
System.out.println(str1.equals(str2));//true
//2.创建一个字符串对象并进行字符串操作
String str3 = "bjsxt";
String str4 = "bjsxt";
String str5=str3;
System.out.println(str3.equals(str5));//true
System.out.println(str3==str4);//!!!true
System.out.println(str3.equals(str4));//true
//3.注意空字符串""和null的区别
String str6="";
String str7=null;
System.out.println(str6.length());//0
try {
System.out.println(str7.length());//NullPointerException
} catch (Exception e) {
e.printStackTrace();
}
//4.String类的缺点:字符串的拼接时,要创建多个字符串对象
String str="中国";
str=str.concat("北京");
str=str.concat("大兴区");
str=str.concat("亦庄开发区");
str=str.concat("北京尚学堂");
System.out.println(str);
}
}