String类基础

一,不可变字符串

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
		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值