- 简介
- 字符串创建
- 比较
- 获取
- 截取
- 转换
- 分割
字符串类。是java里的核心类。
String类被final关键字修饰,表示String类不能被继承,并且它的成员方法都默认为final方法。
String类数据效果上相当于char[] 数组,底层是byte[]字节数组,并且char数组被private和final修饰,字符串一旦创建就不能再修改。
常量池:
JVM为了提高性能和减少内存开销,在实例化字符串常量的时候进行了一些优化,为字符串开辟一个字符串常量池,类似于缓存区。创建字符串常量时,首先坚持字符串常量池是否存在该字符串,存在该字符串,返回引用实例,不存在,实例化该字符串并放入池中。
实现该优化的基础是因为字符串是不可变的,可以不用担心数据冲突进行共享。
程序中直接用双引号创建的字符串,就在字符串常量池中。字符串常量池则存在于堆区。
字符串创建1.直接创建,如"abc"
2.构造方法:public String(),创建空字符串
3.构造方法:public String(char[] array),根据字符数组创建
4.构造方法:public String(byte[] array),根据字节数组创建
public class Demo07String {
public static void main(String[] args) {
// 空字符串
String s1 = new String();
System.out.println(s1);
// 通过字符数组
String s2 = new String(new char[] {'A', 'B', 'C'});
System.out.println(s2);
// 通过字节数组
String s3 = new String(new byte[] {97, 98, 99});
System.out.println(s3);
// 直接创建
String s4 = "";
System.out.println(s4);
String s5 = "ABC";
System.out.println(s5);
}
}
比较
使用 == 比较字符串,比较的是地址。要比较字符串的值,使用equals。
还有个方法equalsIgnoreCase,忽略大小写
public class Demo08StringEquals {
public static void main(String[] args) {
String s1 = "ABC";
String s2 = "ABC";
String s3 = new String(new char[] {'A', 'B', 'C'});
String s4 = "abc";
// 比较
// == 比较地址
System.out.println(s1 == s2); // true
System.out.println(s2 == s3); // false
// equals 比较内容
System.out.println(s2.equals(s3)); // true
// equalsIgnoreCase 忽略大小写
System.out.println(s1.equals(s4)); // false
System.out.println(s1.equalsIgnoreCase(s4)); // true
}
}
获取
length():获取字符串长度
concat(String str):拼接字符串,返回新的字符串
charAt(int index):获取指定索引位置的单个字符,索引从0开始
indexOf(String str):查找指定字符串在本字符串首次出现的位置,未找到返回-1
public class Demo09StringGet {
public static void main(String[] args) {
String str1 = "dasdjafasfnasgaletq nx";
// 字符串长度
System.out.println(str1.length()); // 22
// 拼接
String str2 = str1.concat("afa");
System.out.println(str2); // dasdjafasfnasgaletq nxafa
// 获取第五个字符
System.out.println(str1.charAt(4)); // j
// "dja"在str1首次出现的位置
System.out.println(str1.indexOf("dja")); // 3
System.out.println(str1.indexOf("ggg")); // -1
}
}
截取
substring(int index):从参数索引位置到末尾
substring(int begin, int end):截取索引从begin开始到end范围的字符,不包含end
public class Demo10StringSub {
public static void main(String[] args) {
String str = "dasdjafasfnasgal";
String str1 = str.substring(4);
System.out.println(str1); // jafasfnasgal
String str2 = str.substring(2, 6);
System.out.println(str2); // sdja
}
}
转换
toCharArray():将字符串转为字符数组并返回
getBytes():获取字符串底层字节数组
replace(CharSequence oldString, CharSequence newString):字符串替换
import java.nio.charset.StandardCharsets;
public class Demo11StringConvert {
public static void main(String[] args) {
String str = "dasdjafasfnasgal";
// 转为字符数组
char[] chars = str.toCharArray();
System.out.println(chars);
System.out.println(chars[0]);
System.out.println(chars.length);
// 转为字节数组
byte[] bytes = str.getBytes();
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
}
// 替换
str.replace("d", "m");
System.out.println(str);
}
}
分割
split(String regex)
按照某个正则表达式参数分割原字符串,得到一个字符串数组
package base6_common_api;
public class Demo09StringSplit {
public static void main(String[] args) {
String s1 = "aa,bb,cc";
// 按逗号分割字符串
String[] arr1 = s1.split(",");
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
// 按照英文点分割
String s2 = "aa.bb.cc";
String[] arr2 = s2.split("\.");
for (int i = 0; i < arr2.length; i++) {
System.out.println(arr2[i]);
}
}
}



