String类的常用方法

  • String底层实现
    通过查看字符串相关的源码,可以知道在jdk1.8及以前,字符串在底层是通过字符串数组进行包装处理的,在jdk1.9以后字符串是由字节数组进行包装处理的

在java中也提供了相应的方法和构造方法进行以上的转化操作
1.
方法定义: (构造)public String(char[]value)将字符数组转化成字符串
(构造)public String(char[]value,int offset,int count)将指定范围的字符数组转化成字符串
(普通)public char[]toCharArray()将一个字符串转化成字符数组
(构造)public String(byte[]value)将字节数组转化成字符串
(构造)public String(byte[]value,int offset,int count)将指定范围的字符数组转化成字符串
(普通)public byte[]getBytes()将字节数组转化成字符串

简单举例

  • 字符数组和字符串相互转化
//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		String strA="hello";
		char[]a=strA.toCharArray();//字符串转为字符数组
		for(int i=0;i<a.length;i++)
			System.out.printf("%c ",a[i] );//h e l l o
		String strB=new String(a);//将a[]转化为字符串
		System.out.printf("%s\n",strB);//hello
		String strC=new String(a,0,3);//将下标0-1的数组内容转化为字符串(注意不包含最后下标)
		System.out.println(strC);//hel
		
	    
	}
}
  • 字符串和字节数组相互转化
//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		String strA="hello";
		byte[]a=strA.getBytes();//将字符串转化为字节数组
		System.out.println(new String(a));//将字符数组全部转化成字符串 结果:hello
		System.out.println(new String(a,0,3));//将指定范围的字节数组转化成字符串 结果:hel
	    
	}
}

2取得字符串的长度 public int length()

//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		String strA="hello";
		System.out.println(strA.length());//5
	}
}

注意:这里容易和求数组长度的length混淆,字符串的length()带有括号是一个函数,数组的length没有括号是一个内置标识符

取出字符串特定位置的字符 public char charAt(int index)参数为字符串该位置的索引

//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		String strA="hello";
	    System.out.println(strA.charAt(4));//o
	}
}

4.查找指定的字符串中指定的字符串是否存在 找到则返回该位置的下标 没有找到则返回-1
public int indexOf(String str)从头开始查找
public int indexOf(String str,int fromIndex)//从指定位置开始查找

//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		String strA="hello";
	    System.out.println(strA.indexOf("ho"));//-1
		System.out.println(strA.indexOf("h",1));//该处从下标为1开始找,找不到h 返回-1
	}
}

注意:该处从指定位置开始查找,但下标不是从指定位置开始算,还是从头开始算

5.清除字符串左右两端的空格
public String trim()

//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		String strA="    he   llo     ";
	   System.out.println(strA.trim());//he   llo
	}
}

注意:只能清除左右两端的空格,中间空格不能清除(亲测)

6.字符串分割
public String[] split(String regex) 该处其实是根据匹配给定的正则表达式来拆分
split(String regex, int limit)根据给定的正则表达式来拆分 限制拆分的后数组的长度
没有设置拆分次数:


//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		String strA="hello world huat";
		String[]a=strA.split(" ");//以空格为基准分割
		for(String str:a)
			System.out.print(str+",");//hello,world,huat,
		
		
	}
}

部分拆分 设置拆分的长度

//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		String strA="hello world huat";
		String[]a=strA.split(" ",2);//以空格为基准分割 如果该长度超过了数组的长度则会实现全部拆分不会报错
	    for(String str:a){
			System.out.print(str+",");//hello,world huat,
		}	
	 
		
		
	}
}

注意:该处将其拆分成长度为2,不是拆2次后将huat丢弃

  • 常见用法
//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		String strA="hello world huat";
		String[]a=strA.split("");
		for(String str:a){
			System.out.print(str+",");//h,e,l,l,o, ,w,o,r,l,d, ,h,u,a,t,
		}
		
		
	}
}

该处直接实现单个字符从全部拆分

  • 如果发现有些字符串无法拆分就必须通过"\"进行转义处理(该处会正则表达式有关)
//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		String strA="13.34.345.34.56";
		String[]a=strA.split(".");//以.进行拆分处理
		for(String str:a){
			System.out.print(str);//该处没有没有结果表明没有拆分成功
		}
		
	}
}

用转义字符进行转义

//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		String strA="13.34.345.34.56";
		String[]a=strA.split("\\.");//以.进行拆分处理
		for(String str:a){
			System.out.print(str);//13343453456
		}
		
	}
}

7.字符串的截取
public String substring(int beginIndex)从指定位置开始一直去到尾进行字符串的截取
public String substring(int beginIndex,int end)截取字符串的开始点到结束点

//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		String strA="hello";
		String strC=strA.substring(0);
		String strB=strA.substring(0,1);//该处不包含结束点
		System.out.println(strC);//hello
		System.out.println(strB);//h
		
	}
}

8.将字符串全部转化为大写或者全部转化为小写
public String toUpperCase()全部转化为大写
public String toLowerCase()全部转为小写

//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		String strA="eDGVrevR";
		String strB=strA.toUpperCase();//转为大写
		String strC=strA.toLowerCase();//转为小写
		System.out.print(strB);//EDGVREVR
		System.out.print(strC);//edgvrevr
		
	}
}

9.判定是否以特定的字符开头或者结尾
public boolean startsWith(String prefix)判断是否以特点的字符开头
public boolean endsWich(String suffix)判断是否以特定的字符结尾

//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		String strA="eDGVrevR";
		System.out.println(strA.startsWith("e"));//判断是否以e开头  结果:true
		System.out.println(strA.endsWith("a"));//判断是否以a结尾   结果:false
		
	}
}

10.判断字符串的内容是否相等
public boolean equals(String str)判断字符串的内容是否相等
public boolean equalsIgnoreCase(String str)不区分大小写比较字符串是否相等

//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		String strA="eDGVrevR";
		String strB="edgvrevr";
		System.out.println(strA.equals(strB));//区分大小写比较  false
		System.out.println(strA.equalsIgnoreCase(strB));//不区分大小写比较  ture
		
	}
}

11.字符串的替换
public String replaceAll(String regex,String replacement)将前面的字符串替换为后面的字符串

//验证String内置的方法
public class StringTest1{
	public static void main(String[]args){
		
		String strB="edgvrevr";
		String strA=strB.replaceAll("r","hhhhh");
		System.out.println(strA);//edgvhhhhhevhhhhh
		
	}
}

参考或者引用:
https://www.cnblogs.com/qing-gee/p/10077215.html
https://www.cnblogs.com/whitewolf/archive/2010/05/03/1726519.html
https://www.cnblogs.com/dolphin0520/p/3803432.html

posted @ 2022-10-29 19:41  一往而深,  阅读(218)  评论(0编辑  收藏  举报