目录
1.关于字符串的修改
法一:借助源字符串,创建新的字符串,
public class Main {
public static void main(String[] args) { String str4="hello";
str4="H"+str4.substring(1);//借助源字符串,创建新的字符串,即字符串拼接
// str4.substring(1):“ello”
System.out.println(str4);//Hello
}
}
法二:使用反射破坏原来的封装,访问一个类内部的private成员
public class Main {
public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
//必不可少
String str5="hello";
Field valueFild=String.class.getDeclaredField("value");
valueFild.setAccessible(true);//将value字段的访问属性设为可访问
char[] value=(char[])valueFild.get(str5);
value[0]='H';//修改第0号位置的字符
System.out.println(str5);//Hello
}
}
2.字符串与字符之间的相互转化
public class Main {
public static void main(String[] args){
char[] arr={'a','s','d','f','g'};
/*
/将字符数组转化为字符串
*/
String s1_arr=new String(arr);
System.out.println(s1_arr);//asdfg
String s2_arr=new String(arr,2,3);
//将字符数组中的部分内容转为字符串
//new String(String arr,int offset,count)
// 从offset=2开始,往后的count=3位转为字符串
System.out.println(s2_arr);//dfg
System.out.println(s1_arr.charAt(3));//f
// 取得字符串中指定位置的字符,索引从0开始
char[] data_s1_arr=s1_arr.toCharArray();
// string.toCharArray()将字符串string转为字符数组
for(int i=0;i<s1_arr.length();i++)
{
System.out.println(data_s1_arr[i]);
// 结果:
//a
//s
//d
//f
//g
}
String s1_arr_to_string=new String(data_s1_arr);//将字符数组转为字符串
System.out.println(s1_arr_to_string);//asdfg
String s1_arr_to_string2=new String(data_s1_arr,2,2);
//将字符数组中的部分内容转为字符串
//new String(char string_arr,int offset,count)
// 从offset=2开始,往后的count=2位字符转为字符串
System.out.println(s1_arr_to_string2);//df
byte[] byte_arr=s1_arr_to_string.getBytes();//获取ASCII码值,以字节数组返回
for(int i=0;i<s1_arr_to_string.length();i++){
System.out.println(byte_arr[i]);//ascii值a:97,s:115···
}
System.out.println(new String(byte_arr));//将ASCII码值转为字符,再转为字符串
}
}
3.字符串比较
public class Main {
public static void main(String[] args){
String string1 = "hello";
String string2 = "Hello";
System.out.println(string1.equals(string2));//区分大小写比较两字符串是否相等
//false
System.out.println(string1.equalsIgnoreCase(string2));//不区分大小写比较两字符串是否相等
//true
System.out.println(string1.compareTo(string2));//比较两个字符串大小关系
//ASCII码,小写字母 > 大写字母的值,
// 通常返回一个整形(string1-string2)的ASCII码值之差
}
}
4.字符串查找
public class Main {
public static void main(String[] args){
String string3 = "xu heng shuai a";
System.out.println(string3.contains("shuai "));//true
System.out.println(string3.contains("a "));//false
String string4 = "xuzhiheng";
System.out.println(string4.indexOf("xu"));//0,x的下标为0
//int indexOf(String str):从头开始查找指定的字符串str的位置,
// 查到了返回位置的索引值
System.out.println(string4.indexOf("hui"));//找不到hui,返回-1
//找不到则返回-1
System.out.println(string4.indexOf("xu", 4));//-1
//int indexOf(String str,int fromIndex):从指定的位置 fromIndex 开始查找指定的字符串str的位置,
System.out.println(string4.lastIndexOf("xu"));//0
//int lastIndexOf(String str):从后往前开始查找字符串
//注意:字符串顺序依然是从前往后
System.out.println(string4.lastIndexOf("ux"));//-1
System.out.println(string4.lastIndexOf("heng", 4));//-1
//lastIndexOf(String str,int fromIndex):
// 从后往前跳过fromIndex 个字符开始查找字符串str
System.out.println(string4.startsWith("xu"));//true
//Boolean startsWith(String str):
// 判断源字符串是否是以str开头的
// 返回值为Boolean类型,
//如果是返回:true
System.out.println(string4.startsWith("heng"));//false
//如果不是则返回:false
System.out.println(string4.startsWith("zhi", 2));//true
//Boolean startsWith(String str,int toffset):
//判断源字符串从 toffset 位置开始的是否以“str”为开头
// 返回值为Boolean类型,
//如果是返回:true
System.out.println(string4.startsWith("zhi", 3));//false
//如果不是则返回:false
System.out.println(string4.endsWith("heng"));//true
//Boolean endsWith(String str):
//判断源字符串是否以“str”为结尾的
// 返回值为Boolean类型,
//如果是返回:true
System.out.println(string4.endsWith("Heng"));//false
//如果不是则返回:false
}
}
5.字符串替换
public class Main {
public static void main(String[] args){
System.out.println(string4.replaceAll("zhi"," "));//xu heng
//String replaceAll(regex str1,replacement str2):
//将str1替换为str2
System.out.println(string4.replaceFirst("xu","Xu"));//Xuzhiheng
//String replaceFirst(regex str1,replacement str2):
//将开头的str1替换为str2
}
}
6.字符串拆分
public class Main {
public static void main(String[] args){
String string5 = "xu heng shuai a";
String[] string5_arr1=string5.split(" ");
System.out.println(Arrays.toString(string5_arr1));//[xu, heng, shuai, a]
//String split(String str):
//将源字符串在“str”处拆分
String[] string5_arr2=string5.split(" ",2);// [xu, heng shuai a]
// String split(String str,int limit):
//将源字符串在“str”处拆分,拆分后的数组长度为limit
System.out.println(Arrays.toString(string5_arr2));
String[] string5_arr3=string5.split(" ",3);
System.out.println(Arrays.toString(string5_arr3));//[xu, heng, shuai a]
}
}
7.字符串截取
public class Main {
public static void main(String[] args){
String string6="abcdefghijklmn";
System.out.println(string6.substring(5));//fghijklmn
// String substring(int index):
//从指定索引处截取到结尾
System.out.println(string6.substring(5,8));//fgh
// String substring(int start,int end):
//截取指定内容:start索引处开始,end索引处结尾
}
}
8.其他操作方法
public class Main {
public static void main(String[] args){
String string7=" a heng zai ";
System.out.println(string7.trim());//“a heng zai”
//String trim():
// 去掉字符串中的左右空格,保留中间的空格
System.out.println(string7.toUpperCase());//“ A HENG ZAI ”
//String toUpperCase():
//转大写
System.out.println(string7.toLowerCase());//“ a heng zai ”
//String toLowerCase():
//转小写
String string8=new String(string7);
//new出来的字符串并不是存储在字符串常量池中,
String string9=new String(string7).intern() ;
// 加上“.intern()”,返回字符串的引用, // 而且是一个常量池中地址
// 此时可以用“==”比较两个字符串
System.out.println(string7==string8);//false
//string7位于字符串常量池中,而string8不是位于字符串常量池中
//所以无法比较
System.out.println(string7==string9);//true
//对于字符串常量池中的字符串可以用“==”判断是否相等
String string10="hello";//字符串常量池
System.out.println(string10.concat(" world."));//hello world.
//String concat(String str):
//给源字符串拼接上str
//相当于“+”连接符,不入池
System.out.println(string10.length());//5
//注意:“.length()”,不是“.length”
System.out.println(string10.isEmpty());//false
//Boolean isEmpty(string str):
//判断字符串str是否为 空字符串,不是null,而是长度等于0
System.out.println("".isEmpty());//true
System.out.println(" ".isEmpty());//false
}
}