String类的构造方法:
1.直接构造
String str = "HelloWorld";
2.将字符串封装成字符串对象
String str2 = new String("HelloWorld");
3.将字符数组的数据封装成字符串对象
char[] array = {'H','e','l','l','0','W','o','r','l','d'};
String str3 = new String(array);
4.将字符数组的数据从索引2开始解析2个长度
char[] array2 = {'H','e','l','l','0','W','o','r','l','d'};
String str4 = new String(array2,2,2);
System.out.println(str4);
// 输出结果为 ll
5. 把字节整数型数组按照ASCII码表解析成字符串
byte[] bytes = {97,98,99,100,101,102};// byte取值范围 -128~127 如果超过这个范围则编译错误
String str5 = new String(bytes);
System.out.println(str5);
// 输出结果为 abcdef
6. 对字节整数型数组从索引为2开始解析2个长度
byte[] bytes2 = {97,98,99,100,101,102};
String str6 = new String(bytes2,2,2);
System.out.println(str6);
// 输出结果为 cd
String类的不可变性
public static void main(String[] args) {
String str = "HelloWorld";
String str2 = str;
str = "GoodBye";
System.out.println("str:"+str);
System.out.println("str2:"+str2);
}
输出结果:
为什么修改了str的值,str2的值没有一起修改呢?这是因为String是引用数据类型,是不可变的
我们通过修改str=“GoodBye”,只是在字符串池中新建了一个“GoodBye”,并且将str的栈内存地址修改所对应的地址,而str2的地址还是不变的
String类的方法摘要:
返回指定索引处的 char
值 。
String str = "HelloWorld";
System.out.println(str.charAt(0));
// 输出结果 H
返回指定索引处的字符(Unicode 代码点)。
String str = "HelloWorld";
System.out.println(str.codePointAt(3));
// 输出结果为 108,输出下标为 3 的字母 l 所对应的Unicode编码 为108(十进制)
返回指定索引之前的字符(Unicode 代码点)。
String str = "HelloWorld";
System.out.println(str.codePointBefore(2));
// 输出结果为 101,输出下标为 2 的字母 l 之前的字母 e 所对应的Unicode编码 为101(十进制)
将指定字符串连接到此字符串的结尾。
String str = "Hello";
System.out.println(str.concat("World"));
// 输出结果为 HelloWorld
当且仅当此字符串包含指定的 char 值序列时,返回 true。
String str = "Hello";
System.out.println(str.contains("Hell"));
System.out.println(str.contains("World"));
// 输出结果为 第一个是 true 第二个是 false
返回指定字符在此字符串中第一次出现处的索引。
String str = "Hello";
System.out.println(str.indexOf("l"));
// 输出结果为 2
判断字符串是否为空(空则返回true,反之返回false)。
String str = "HelloWorld";
String str2 = "";
System.out.println(str.isEmpty());
System.out.println(str2.isEmpty());
// 输出结果为 false 、 true
返回指定字符在此字符串中最后一次出现处的索引。
String str = "HelloWorld";
System.out.println(str.lastIndexOf("l"));
// 输出结果为 8
返回此字符串的长度。
String str = "HelloWorld";
System.out.println(str.length());
// 输出结果为 10
使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。
String str = "HelloWorld";
System.out.println(str.replace("World","世界"));
// 输出结果为 Hello世界
根据关键字拆分字符串。
String str = "HelloWorld";
String[] str2 = str.split("l");
for(String s :str2){
System.out.println(s);
}
// 输出结果为 He oWor d
返回一个新的字符串,它是此字符串的一个子字符串。
String str = "HelloWorld";
System.out.println(str.substring(5));
// 输出结果为 World
将此字符串转换为一个新的字符数组。
String str = "HelloWorld";
char[] chars = str.toCharArray();
for (char aChar : chars) {
System.out.println(aChar);
}
// 输出结果为 H、e、l、l、o、W、o、r、l、d
使用默认语言环境的规则将此 String
中的所有字符都转换为小写。
String str = "HelloWorld";
System.out.println(str.toLowerCase());
// 输出结果为 helloworld
使用默认语言环境的规则将此 String
中的所有字符都转换为大写。
String str = "HelloWorld";
System.out.println(str.toUpperCase());
// 输出结果为 HELLOWORLD
返回字符串的副本,忽略前导空白和尾部空白。
String str = " He lloWorld ";
System.out.println(str.trim());
// 输出结果为 He lloWorld
StringBuffer和StringBuilder
StringBuffer和StringBuilder的方法基本上相同
区别:
StringBuffer线程安全
StringBuilder线程不安全
StringBuilder:
StringBuilder sb=new StringBuilder();
//添加内容到容器尾部
sb.append("aaaaa");
//删除第一个到第二个的元素
sb.delete(1,2);
//插入元素到指定位置
sb.insert(2,"bbb");
//删除指定位置的元素
sb.deleteCharAt(2);
//替换指定位置的元素
sb.replace(1,3,"ccc");
//反转内容
sb.reverse();
//截取内容返回一个字符串
System.out.println(sb.substring(1));
sb.append("weweraereasearaerwarsa");
//获取string buffer的长度
System.out.println(sb.length());
//将stringbuffer转成string对象
String sb1 = sb.toString();
System.out.println(sb);
StringBuffer:
StringBuffer sb = new StringBuffer("aaa");
//添加内容到容器尾部
sb.append("aaaaa");
//删除第一个到第二个的元素
sb.delete(1,2);
//插入元素到指定位置
sb.insert(2,"bbb");
//删除指定位置的元素
sb.deleteCharAt(2);
//替换指定位置的元素
sb.replace(1,3,"ccc");
//反转内容
sb.reverse();
//截取内容返回一个字符串
System.out.println(sb.substring(1));
sb.append("weweraereasearaerwarsa");
//获取string buffer的长度
System.out.println(sb.length());
//将stringbuffer转成string对象
String sb1 = sb.toString();
System.out.println(sb);