String 类
在 java.lang 包下的一个类、所以该类不需要导入,可以直接使用
String 类 用来表示 字符串 类型
字符串类型是由 多个字符组成一个特殊的数组
Java中的字符串类型 对应的值 是不可变的
字符串的字面量表示 使用 双引号
声明并创建一个字符串对象
// 创建一个 长度为 0, 内容空 空字符串 的 字符串对象
String s = new String();
// 创建一个长度为 0, 内容为 空 字符串的 字符串对象
String s = "" ;
// 创建一个 内容为 hello 的字符串对象
String s = new String("hello") ;
String s = "hello" ;
// 用一个 char 数组 构建一个字符串对象
char[] x = {'中', '国', '人'} ;
String s = new String(x) ;
// 用一个 byte 数组 构建一个字符串对象
byte[] x = {65, 66, 67} ;
String s = new String(x) ; // ABC
字符串 常量池(串池)
当使用 字面量(用双引号引起来的内容) 来构建 字符串的时候, 会从串池中获取对象,所以 只要内容相同,那么地址一定相同
new 构建的字符串
使用 new 关键字,代表创建对象,创建好的对象会被存储在堆空间中
// 该语句创建了2个对象
String s = new String("hello");
// 该语句创建了1个对象
String s1 = new String("hello") ;
第一个对象是 从 常量池 中构建的 hello , 第二个对象是从堆空间中创建的 new String(“hello”)
字符串是不可变的
String 默认存储数据使用 byte[] , 但是 JDK7 以及之前的版本采用的是 char[]
JDK8 优化了String数据的存储方式
由于 byte[] value 使用 final 修饰,代表地址不可更改
String类中的静态方法
-
valueOf(x) : 可以将任意类型数据转成字符串, 如果值为 null(空), 那么会返回一个长度为4 且内容为 null 的字符串
-
format(template, args…) : 格式化字符串,按照指定的格式,显示字符串的内容
String 常见的成员方法
isEmpty() : 判断字符串是否长度为 0
isBlank() : JDK11 判断字符串是否为空(包含空白字符)
charAt(index) : 获取指定索引位置的字符
codePointAt(index) : 取指定索引位置的字符码
getBytes(charset) : 将字符串按指定编码转为流
equals(obj) / equalsIgnoreCase(str) : 判断两个字符串内容是否相同
compareTo(str) : 判断字符串的大小 >0前者大于后者 =0两个字符串相等 <0后者大于前者
startsWith(str) / endsWith(str) : 判断字符串是否以 … 开头/结尾
contains(str) : 是否包含某个指定的子串
indexOf(str) / lastIndexof(str) : 搜索 str 在字符串中的索引位置 >=0代表自定字符串的索引位置 -1没有找到满足条件的字符串
concat(str) : 连接字符串 ,相当于 +
substring(offset , endIndex) : 从字符串指定位置截取字符串,截取到指定位置 不包含endIndex 对应的字符
截取长度 = endIndex - offset endIndex 超出了字符串的最大长度 则抛出异常
endIndex <0 , 则抛出异常 endIndex 不传,则代表截取到尾部
replace(oldstr , newstr) / replaceAll(regex, newstr) : 替换全部满足条件字符串
replaceFirst(regex, newstr) : 替换第一个匹配的字符串
matches(regex) : 是否匹配某个正则
split(regex , max=0) : 拆分字符串, max允许拆分的最大次数,如果不设置,或者设置为 <=0. 代表 全部拆分
toLowerCase() / toUpperCase() : 字符串 转为 小写/大写,(大小写只对字母生效)
trim() : 移除字符串两侧的空白字符(空格、tab键、换行符) 无法删除掉Unicode空白字符, 但用Character.isWhitespace©方法可以判断出来
strip() : 可以去掉 Unicode空白字符
repeat(n) : 重复 N次
toCharArray() : 转为字符数组
template : 字符串模板, 可以支持的占位符有
%d : 代表一个整数
%s : 代表一个字符串
%f : 代表一个小数
%.nf : n是一个数字,例如 %.2f 代表 小数点后保留2位数字
%x : 代表在控制台输出的时候,会自动转成 16进制
%o : 代表在控制台输出的时候,会自动转成 8进制
%b : 代表在控制台输出的时候,会自动转成 boolean
%% : 代表在控制台输出的时候, 会输出一个 %
- join(sep, str…) : 将多个字符串,按照 sep指定分隔符,进行拼接,形成一个新的字符串
- String.copyValueOf(char[]) : 将 char 数组转成字符串
- String.copyValueOf(char[], offset, len) : 将 char数组中指定范围内的元素转成字符串
char[] 和 String 相互转换
char[] —> String :
- new String(char[])
- String.copyValueOf(char[])
String —> char[]
- toCharArray(); 将字符串转成 char数组
byte[] 和 String 相互转换
byte[] ----> String
- new String(byte[])
String ----> byte[]
- getBytes()
StringBuilder
可变的字符串
StringBuilder 常见的构造方法
StringBuilder() : 无参构造,创建一个长度为 0 内容为 空字符串的对象
StringBuilder(String str) : 将一个字符串快速转换成 StringBuilder对象
StringBuilder 常见的成员方法
append(x) : 进行字符串拼接、将 x 拼接到字符串的尾部
delete(start ,end) : 删除指定区间内的字符串
deleteCharAt(int index) : 删除指定位置的字符
replace(int start, int end, String str): 将指定区间的内容,替换成指定的内容
insert(int offset, String str) : 将指定的str字符串插入到 offset对应的位置上
indexOf / lastIndexOf : 用来获取指定的子串 在字符串中出现的索引位置,如果找不到,返回 -1
reverse() : 反转字符串
toString() : 将 StringBuilder 对象转成 String
length() : 获取字符串的长度
compareTo(str) : 比较两个字符串的大小
StringBuffer
可变的字符串, 用法和 StringBuilder 完全相同
StringBuilder VS StringBuffer
StringBuilder 是线程不安全的,在高并发环境下会出现问题,性能高
StringBuffer 是线程安全的,主要应用于多线程环境下,性能较低
StringJoiner
用来拼接字符串的
常见的构造方法
StringJoiner(String delimiter) : 构建一个StringJoiner对象,并指定分隔符
StringJoiner(String delimiter, String prefix, String suffix) : 构建一个StringJoiner对象,并指定分隔符 前缀和后缀
常见的方法
-
add(x) : 将要进行拼接的元素添加到 Joiner对象中
-
merge(StringJoiner joiner) : 将两个 Joiner对象进行合并