一、字符串构造
public static void main(String[] args) {
//使用常量字符串构造
String str = "abcd";
//new String对象
String str2 = new String("hello");
//用字符数组来构造字符串
char[] array = {'a','b','c','d'};
String str3 = new String(array);
}
注意:
1、String是引用类型,内部并不存储字符串本身
2、字符串存储逻辑:
(1)、先检查这个内存(字符串常量池)有没有这个字
(2)、如果没有,存进去
(3)、如果有,就不重复存储,取出现有的对象即可
3、str里会存放value、coder、hash、hashIsZero
4、value存的是ASCII码
5、双引号引起来的是常量值
6、字符串本身就是引用类型,可以直接“abc”.length
二、String对象比较
1、==比较是否引用同一个对象
public static void main(String[] args) {
String str1 = "abcdef";
String str2 = "abcdef";
//对于引用类型,== 比较的是引用中的地址
//规定只要是双引号引起来的字符串,会存在一个字符串常量池当中
System.out.println(str1 == str2);//true
String str3 = new String("hello");
String str4 = new String("hello");
System.out.println(str3 == str4);//false
//str3和str4是不一样的对象
//真正想看一不一样用equals
System.out.println(str1.equals(str2));
System.out.println(str3.equals(str4));
}
2、boolean equals(Object anObject) 方法:按照字典序比较(字符大小的顺序 )
3、boolean equalsIgnoreCase(Object anObject)方法:忽略大小写比较
public static void main(String[] args) {
String str3 = new String("hello");
String str4 = new String("Hello");
System.out.println(str3.equals(str4));
//忽略大小写
System.out.println(str3.equalsIgnoreCase(str4));//忽略大小写进行比较,例如验证码
}
4、int compareTo(String s) 方法: 按照字典序比较(字符大小的顺序 )
与
equals
不同的是,
equals
返回的是
boolean
类型,而
compareTo
返回的是
int
类型。
具体比较方式:
(1)、
先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值
(2)、如果前
k
个字符相等
(k
为两个字符长度最小值
)
,返回值两个字符串长度差值
5、int compareToIgnoreCase(String str) 方法:与compareTo方式相同,但是忽略大小写比较
public static void main(String[] args) {
String str1 = "abcd";
String str2 = "def";
System.out.println(str1.compareTo(str2));
System.out.println(str1.compareToIgnoreCase(str2));//忽略大小写进行比较
}
三、字符串查找
charAt
indexOf
lastIndexOf
public static void main(String[] args) {
String str1 = "abcd";
String str2 = "def";
char ch = str1.charAt(1);
System.out.println(ch);//获得字符串的第几个位置(从0开始)
int index = str1.indexOf('d');//获得字符的位置
System.out.println(index);
int index2 = str1.indexOf('a',2);//从第几个位置开始找字符,重载
System.out.println(index2);
int index3 = str1.indexOf("bc");//返回要找字符串的第一个字符的下标
System.out.println(index3);
int index4 = str1.indexOf("bc",1);//从第几个位置开始找字符串,重载
System.out.println(index4);
String str3 = "abcdabcaabc";
int index5 = str3.lastIndexOf('a',4);//从后往前找,返回找到的字符下标,从fromindex个下标从后往前找,字符串与上面的一样
System.out.println(index5);
}
四、字符串的转化
valueOf
parseInt/parseDouble
toUpperCase
toLowerCase
toCharArray
format
public static void main(String[] args) {
String s1 = String.valueOf(1234);
String s2 = String.valueOf(12.34);
String s3 = String.valueOf(true);//转成字符串
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
int data1 = Integer.parseInt("1234");
double data2 = Double.parseDouble("12.34");//将字符串转化成整型
System.out.println(data1+1);
System.out.println(data2+2);
String str1 = "abcd";
String str4 = str1.toUpperCase();//产生新的对象,小写转大写
System.out.println(str4);
String str2 = "ABCD";
String str3 = str2.toLowerCase();//将大写转小写
//修改不是在原字符串本身进行修改的,而是给到新的字符串
System.out.println(str3);
char[] array = str1.toCharArray();//把字符串转为数组
System.out.println(Arrays.toString(array));
String s = new String(array);//把数组转为字符串
System.out.println(s);
String s4 = String.format("%d-%d-%d",2024,3,13);//格式化
System.out.println(s4);
}
五、字符串的替换
replace
replaceFirst
replaceAll
public static void main(String[] args) {
//字符串替换
String str1 = "abcdc";
String str2 = str1.replace('a','l');//字符整体替换
System.out.println(str2);
//字符串整体替换
String ret2 = str1.replace("ab","kkk");
System.out.println(ret2);
String ret3 = str1.replaceFirst("ab","kkk");//替换第一个字符串
System.out.println(ret3);
String ret4 = str1.replaceAll("a","b");//字符串整体替换
}
六、字符串的拆分
split
public static void main(String[] args) {
String str = "ab&cdf&hij";
String[] strings = str.split("&");//分割字符串,再加上一个形参limit指的是最多分成几组
//正则分割字符串
//"|",".","*","+"都得加上转义字符"\\"
//如果是\\,"\\\\",但实则\\是一个\
//如果想一次分割完可以用"|",例如"ab=bc&wa"=>用"=|&"结果ab bc wa
for (String s : strings){
System.out.println(s);
}
}
多次拆分
public static void main(String[] args) {
String str = "name=zhangsan&name=lisi";
String[] strings = str.split("&");
//strings2[0]:name=zhangsan strings[1]=name=lisi
for (String s : strings){
System.out.println(s);
String[] ss = s.split("=");
for(String x : ss){
System.out.println(x);
}
}
}
七、字符串截取
substring
public static void main(String[] args) {
String str1 = "abcdef";
//从指定下标 开始进行截取 截取位置左闭右开
String str2 = str1.substring(1,3);//[1,3) bc
System.out.println(str2);
}
八、删除左右空格
trim
public static void main(String[] args) {
String str1 = " abc de ";
String str2 = str1.trim();//去掉字符串左右两边字符
System.out.println(str2);
}