一、String类介绍
1.可以看出String是被final所修饰,继承Object
(所有的类都默认继承Oject类)
2.常见的定义方法
//第一种方法
String str1 = "abcd";
//第二种方法
String str2 = new String("abcd");
//第三种方法
char[] value = {'a','b','c','d'};
String str3 = new String(value);
3.字符串的存储方式
字符串是在堆中的字符串常量池进行存储。一旦一个字符串被存储到常量池中,只有一个,如果后续还有存储字符串时,会检查常量池中是否有该字符串常量。只要是双引号引起来的,都会被存放到字符串常量池中。
第一种方式定义字符串常量的内存图:直接将字符串保存到字符串常量池中,然后引用
第二种方式定义字符串常量的内存图:str2存放在堆中开辟一些内存存放new String(abcd)的地址,然后该内存中的一个小内存用来存放abcd在常量池的地址
第三种方式定义字符串常量的内存图:将在堆中开辟空间存放a b c d的空间的地址存放到value中,然后将他拷贝一份,在引用一个new String(value)对象,将new String(value)的地址存放到str3中,在将拷贝的地址存放到new String(value)中value中(两个value没有任何关系,一个是存放数组的变量名,一个是引用)
二、String的常见操作
1.字符串的大小比较
String str1 = "abcde";
String str2 = "abCde";
System.out.println(str1.compareTo(str2));
相差的值是ascll码表中的值
2.字符串的内容比较
String str1 = "abcde";
String str2 = "abCde";
System.out.println(str1.equals(str2));
相同输出true,不同输出false;
注意:srt1不能为null
3.字符转字符串
char[] value = {'a','b','c','d'};
//第一种方法
String str1 = new String(value);
//第二种方法
String str2 = new String(value,1,3);
//offset是数组的起始位置,count是偏移量,不能越界
4.字符串转字符
String str1 = "hello";
//单个转换
char a = str1.charAt(0);//将字符串的几号下标变成字符
//整体转换
char[] b = str1.toCharArray();
三、字符串查找
1.找字符串的子串
String str = "abcde";
boolean flg = str.contains("cde");
System.out.println(flg);
2.寻找字符串并返回下标
String str = "abcdede";
System.out.println(str.indexOf("cd"));//输出1,如果没有该字符串,输出-1
System.out.println(str.indexOf("cd",3));//从三号位置开始找,输出-1
System.out.println(str.lastIndexOf("cd",4));//在四号位置开始从后往前找
3.判断字符串是否是以给定内容开始以及给定内容结束
String str = "abcde";
System.out.println(str.startsWith("a"));//返回boolean类型
System.out.println(str.startsWith("c",2));//从二号位置开始
System.out.println(str.endsWith("e"));//没有偏移量
四、字符串的替换
替换给定指定内容
String str = "abcdab";
System.out.println(str.replaceAll("ab","ef"));//将ab全部替换成ef
System.out.println(str.replaceFirst("ab","ef"));//将第一次出现的ab替换成ef
五、字符串的分割
String str = "1999-05-13";
String[] ret = str.split("-");//返回值是一个字符串数组
for (int i = 0; i < ret.length; i++) {
System.out.println(ret[i]);
String str = "1999-05-13";
String[] ret = str.split("-",2);//分成两组
for (int i = 0; i < ret.length; i++) {
System.out.println(ret[i]);