String类
-
字符串是一个常量,创建之后不可改变
-
字符串字面值存储在字符串池中,可以共享
-
String s=“Hello”;产生一个对象
String s1=“hello”;
String s2=“hello”;
s1和s2地址一样
-
String s=new String(“Hello”);产生两个对象,堆、池各一个
String s1=new String(“Hello”);
String s2=new String(“Hello”);
s1和s2的地址不一样
public class StringStudy { public static void main(String[] args) { String name1="LiuXinyu"; //"LiuXinyu"存储在字符串池中 name1="刘心雨"; //"刘心雨"赋值给name1,并没有修改"LiuXinyu",而是重新开辟一个空间指向name1 String name2="LiuXinyu"; //在字符串池中寻找"LiuXinyu",若有指向"LiuXinyu" String name3="刘心雨"; //与name1指向同一个字符串 ,与name1地址一样 String name4 = new String("刘心雨"); //开辟一个新地址,与name1地址不一样9 String name5 = new String("刘心雨"); System.out.println(name1==name3); //true(地址一样 ) System.out.println(name1==name4); //false(地址不一样 ) System.out.println(name4==name5); //false(地址不一样 ) System.out.println(name1.equals(name3)); //true(内容一样) System.out.println(name1.equals(name4)); //true(内容一样) System.out.println(name4.equals(name5)); //true(内容一样) } }
视频如下:https://www.bilibili.com/video/BV1vt4y197nY?p=20&spm_id_from=333.1007.top_right_bar_window_history.content.click
常用方法
- public int length:返回字符串长度
- public char charAt(int index);根据下标获取字符
- public boolean contains(String str):判断当前字符串中是否包含str
public class StringLearn {
public static void main(String[] args) {
String name="Liuxinyu";
System.out.println(name.length());
//8(长度)
System.out.println(name.charAt(2));
//u(返回索引值)
System.out.println(name.contains("xin"));
//true(是否包含)
System.out.println(name.contains("xia"));
//false(不包含)
}
}
-
public char[] toCharArray():将字符串转换成数组
-
public int indexOf(String str):查找str首次出现的下标,存在,返回该下标;不存在,返回-1
-
public int lastIndexOf(String str):查找字符串在当前字符串最后一次出现的下标索引
import java.util.Arrays;
public class StringLearn {
public static void main(String[] args) {
String name="LiuxinyuLiuxinyu";
System.out.println(name.toCharArray());
//LiuxinyuLiuxinyu
System.out.println(Arrays.toString(name.toCharArray()));
//[L, i, u, x, i, n, y, u, L, i, u, x, i, n, y, u]
System.out.println(name.indexOf("xi"));
//3(第一个字符的索引)
System.out.println(name.lastIndexOf("xi"));
//11(第一个字符的位置)
}
}
- public String trim():去掉字符串前后的空格
- public String toUpperCase():将小写转为大写
- public boolean endWith(String str):判断字符串是否以str结尾
public class StringLearn {
public static void main(String[] args) {
String name=" LiuxinyuLiuxinyu ";
System.out.println(name.trim());
//LiuxinyuLiuxinyu
System.out.println(name.toUpperCase());
// LiuxinyuLiuxinyu
System.out.println(name.endsWith("yu"));
//false
System.out.println(name.toLowerCase());
// liuxinyuliuxinyu
}
}
-
public String replace(char oldChar,char newChar):将旧字符替换成新字符
-
public String[] split(String str):根据str做拆分
-
public String concat(String str):将str连接在字符串后
public class StringLearn {
public static void main(String[] args) {
String name="Liu xin yu Liu xin yu";
System.out.println(name.replace("Liu", "LIU"));//LIU xin yu LIU xin yu
String[] arr=name.split(" ");
String[] arr2=name.split("[Lx]");//用L或者x做分割
for (int i=0;i< arr.length;i++) {//arr[0]Liu arr[1]xin arr[2]yu arr[3]Liu arr[4]xin arr[5]yu
System.out.print("arr["+i+"]"+arr[i]+" ");
}
System.out.println();
for (int i=0;i< arr2.length;i++) {//arr2[0] arr2[1]iu arr2[2]in yu arr2[3]iu arr2[4]in yu
System.out.print("arr2["+i+"]"+arr2[i]+" ");
}
System.out.println();
System.out.println(name.concat("beautiful"));//Liu xin yu Liu xin yubeautiful(连接)
}
}
运行结果:
LIU xin yu LIU xin yu
arr[0]Liu arr[1]xin arr[2]yu arr[3]Liu arr[4]xin arr[5]yu
arr2[0] arr2[1]iu arr2[2]in yu arr2[3]iu arr2[4]in yu
Liu xin yu Liu xin yubeautiful
- s1.equals(s2):比较两个字符串内容是否相等
- s1.equalsIgnoreCase(s2):忽略大小写比较
- s1.compare(s2):先比较两个第一个,任何一次,比较两个大小,前面大为正.若前面大小一样,比较长度,前面长度减去后面长度
public class StringLearn {
public static void main(String[] args) {
String name1="ABCD";
String name2="CBA";
String name3="ABCD";
String name4="abcd";
System.out.println(name1.equals(name3));
System.out.println(name1.equalsIgnoreCase(name4));
System.out.println(name1.compareTo(name2));
}
}
结果:
true
true
-2
- subString(int beginindex,int endindex):截取字符串片段(开始到结束)
可变字符串
-
StringBuffer:可变长字符串,运行效率慢、线程安全
-
StringBuilder:可变长字符串,运行效率快、线程不安全
-
两者方法一样
public class StringBufferStudy {
public static void main(String[] args) {
StringBuffer sb=new StringBuffer();
//append() 追加字符串(在后面加入字符串)
sb.append("Liu");
System.out.println(sb.toString());
sb.append("xinyu");
System.out.println(sb.toString());
//insert()插入
sb.insert(0,"刘心雨 ");
System.out.println(sb.toString());
sb.insert(sb.length()," 20岁");
System.out.println(sb.toString());
//replace()替换(可以指定位置替换)
sb.replace(1,4,"Lily ");
System.out.println(sb.toString());
//delete()删除(指定位置)
sb.delete(0,5);
System.out.println(sb.toString());
}
}
输出结果:
Liu
Liuxinyu
刘心雨 Liuxinyu
刘心雨 Liuxinyu 20岁
刘Lily Liuxinyu 20岁
刘 Liuxinyu 20岁
- append() 追加字符串(在后面加入字符串)
- insert()插入
- replace()替换(可以指定位置替换)
- delete()删除(指定位置)