一,不可变字符串
String类为不可变字符串,通过String类方法对字符串进行操作之后,新字符串为自动新创建的字符串对象。而且String类被Final修饰,不能被继承。
二.创建字符串。
String str1 = "学习Java";
String str2 = new String("努力学习Java");
String str3 = "18"+19; //1819
char[] ch = new char[]{'a','b','c','d','e','f'};
String str4 = new String(ch,2,3);//2开始位置的索引,3位长度
//以上这样的字符串常量会被放到常量池
提示:使用数组创建字符串只能将char类型的数组转化为字符数,以下的代码编译器会报错。
double[] a = new double[] {1.1,1.2,1.3,1.4,1.5};
String str = new String(a); 错误!!
int[] a = new int[] {4,6,8,5};
String str = new String(a); 错误!
三.字符串的比较。
String str10 = "gao";
String str11 = "gao";
String str12 = new String("gao");
System.out.println(str10 == str11); //true 位置相同,为同一个对象
System.out.println(str11 == str12); //false str11 和 str12不是同一对象
//通常比较字符串时用equals
System.out.println(str11.equals(str12));//true 字符串内容相同
三.StringAPI常用方法
1.
String str1 = "core Java Java";
String str2 = "Core Java";
char ch = str1.charAt(3); //读取下标为3的字符
int a = str1.length(); //该字符串的长度
boolean b = str1.equals(str2); //比较两个字符串内容是否相同
boolean b2 = str1.equalsIgnoreCase(str2); //比较两个字符串忽略大小写下 内容是否相同
int c = str1.indexOf("Java"); //返回参数第一个字母第一次出现位置的下标 没有出现返回-1;
int d = str1.lastIndexOf("Java")); //返回参数第一个字母最后一次出现位置的下标 没有出现返回-1;
int e = str1.indexOf("Java",6); //返回参数第一个字母在索引位置为6(不包括6)之后第一次出现位置的下标 没有出现返回-1;
int f = str1.lastIndexOf("a", 12);//返回参数第一个字母在索引位置为12(不包括12)之前最后一次出现位置的下标 没有出现返回-1;
String newStr1= str1.replace(' ', '&')); // 替换全部字符,会创建新的字符串
String newStr2= str1.replace("ava", "AVA")); // 新创建的字符串,替换字符串
String newStr2 = str1.replaceFirst("J", "改变"); //替换字符串,可以是正则,(只替换第一次出现的),会创建新的字符串
String newStr3 = str1.replaceAll("ava", "改变"); //替换字符串,可以是正则,(全部替换),会创建新的字符串
//说明: str.lastIndexOf(""); 等价于 str.length();
System.out.println(str1.concat("追加字符串")); //在字符串之后追加新的字符串
char[] arr = str1.toCharArray();
for(char a:arr) {
System.out.print("["+a+"]"); // 将字符串分解为字符数组
}//[c][o][r][e][ ][J][a][v][a][ ][J][a][v][a]
String s1 = "How are you?";
boolean a = s1.startsWith("how");//s1是否是以how开头 false
boolean b = s1.endsWith("you"));//s1是否是以you结束 flase
String str1 = s1.substring(4); //截取[4,之后的全部
String str2 = s1.substring(4,7); //截取[4,7)
String str3 = s1.toLowerCase(); //将s1全部转换为小写
String str4 = s1.toUpperCase();//将s1全部转换为大写
String s2 = " How old are you? ";
String s = s2.trim(); //去除s2字符串开头和结尾的空格
String.valueOf();//返回 boolean,char.char数组,整形,浮点型,Object参数的字符串 形式。
四.字符串 编译器优化问题
//编译器做了优化 直接在编译的时候讲字符串拼接
String str1 = "hello"+" Java"; //相当于String str1 = "hello Java";
String str2 = "hello Java";
System.out.println(str1 == str2); //true
System.out.println(str1.equals(str2)); //true
String str3 = "hello";
String str4 = " Java";
//编译时不知道变量中有什么 所以没办法直接优化
String str5 = str3+str4;
System.out.println(str5 == str2); //false
System.out.println(str5.equals(str2)); //true
总结:“equals”方法不受影响,“==”受影响。
五.String的其他方法。
1.String.join()方法
//静态方法String.join(Stirng delimiter,String elements......)
//delimiter - 分隔每个元素的分隔符 elements - 要加入的元素。
//二者皆需要为String类型
String str2 = String.join("-","用","分","隔","符","接","多","个","字","符","串","的","方","法");
System.out.println(str2); // 用-分-隔-符-接-多-个-字-符-串-的-方-法
2.String.split()方法
字符串分割 : 将字符串按照指定的符号分割成String数组
.split(“分割符号”); 可以用正则表达式
.split(“分割符号”,分割份数);
String str1="1,2.3,4.5,6.";
String[] element = str1.split("\\.");
for(String temp:element) {
System.out.print(temp+" "); //1,2 3,4 5,6
}
String[] element2 = str1.split("\\.",3);
for(String temp:element2) {
System.out.print(temp+" "); //1,2 3,4 5,6.
}//分割前两次,剩余元素全部放入第三个元素
注意:如果分割份数的值大于实际数,所得到数组的长度也会不同。示例:
String str = "1,2,3,4,5,6";
String[] arr = str.split("\\,",8);
for(String temp:arr) {
System.out.print("["+temp+"]"); //[1][2][3][4][5][6]
}
System.out.println("\n"+arr.length);//6
String str1="1,2.3,4.5,6.";
String str2="1,2.3,4.5,6";
String[] element1 = str1.split("\\.",6);
//遍历数组1
for(String temp:element1) {
System.out.print("["+temp+"]"); //[1,2][3,4][5,6][]
}
//数组长度
System.out.println("\n"+element1.length); //此时为4
//查看数组的第四的元素
System.out.println(element1[3]); //(什么也没有)
boolean boo = element1[3].equals(null);
System.out.println(boo); //false
String[] element2 = str2.split("\\.",6);
//遍历数组1
for(String temp:element2) {
System.out.print("["+temp+"]"); //[1,2][3,4][5,6]
}
//数组长度
System.out.println("\n"+element2.length); //此时为3
提示:使用“||”符号无法实现预期的效果
必须使用“|”才能表示多个分割符
String str1="1,2.3,4.5,6.";
String str2="1,2.3,4.5,6";
String[] element3 = str1.split("\\.|\\,");
for(String tmp:element3) {
System.out.print("["+tmp+"]"); //[1][2][3][4][5][6]
}
System.out.println("\n"+element3.length);//6
System.out.println();
String[] element4 = str2.split("\\,|\\.",8);
for(String tmp:element4) {
System.out.print("["+tmp+"]");//[1][2][3][4][5][6]
}
System.out.println("\n"+element4.length);//6