- 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
}
}
标签:常用,String,System,字符串,strA,方法,public,out
From: https://www.cnblogs.com/swtaa/p/16835767.html