字符串操作
掌握字符串的进阶操作
能处理常见的字符串业务场景
理解 String、StringBuilder、StringBuffer 的区别
核心讲解
(1)字符串判空
三种情况:null、空字符串 ""、全是空白字符。
判空:
str == null || str.trim().isEmpty()工具类:Apache Commons Lang 的
StringUtils.isBlank(),企业常用
(2)字符串与数组互转
字符串转字符数组:
toCharArray()字符串转字符串数组:
split()字符数组转字符串:
new String(char数组)字符串拼接:
String.join(分隔符, 字符串数组/列表)
(3)类型转换
转数字:
Integer.parseInt()、Double.parseDouble()数字转字符串:
String.valueOf(数字)、数字+""
(4)三个字符串类对比
表格
类 | 可变性 | 线程安全 | 适用场景 |
|---|---|---|---|
String | 不可变 | - | 少量修改、常量 |
StringBuilder | 可变 | 不安全 | 单线程,频繁修改,推荐 |
StringBuffer | 可变 | 安全 | 多线程环境 |
代码示例
public class StringOpDemo {
public static void main(String[] args) {
// 1. 判空
String s1 = null;
String s2 = " ";
System.out.println("s1空:" + isBlank(s1));
System.out.println("s2空:" + isBlank(s2));
// 2. 数组互转
String str = "a,b,c,d";
String[] arr = str.split(",");
System.out.println("数组长度:" + arr.length);
String joinStr = String.join("-", arr);
System.out.println("拼接后:" + joinStr);
// 字符数组
char[] chars = "hello".toCharArray();
for (char c : chars) {
System.out.print(c + " ");
}
System.out.println();
// 3. 类型转换
String numStr = "12345";
int num = Integer.parseInt(numStr);
System.out.println("转int:" + (num + 1));
String intStr = String.valueOf(100);
System.out.println("转字符串:" + intStr + 20); // 字符串拼接
// 4. StringBuilder链式调用
StringBuilder sb = new StringBuilder();
sb.append("用户:").append("张三")
.append(",年龄:").append(20)
.append("岁");
System.out.println(sb.toString());
}
// 自定义判空方法
public static boolean isBlank(String str) {
return str == null || str.trim().length() == 0;
}
}
常见误区
null 调用方法:null 字符串调用任何方法都会空指针,判空一定要先判断 null
数字转字符串用 +"":
num + ""虽然方便,但不规范,推荐String.valueOf()多线程用 StringBuilder:多线程环境要用 StringBuffer,StringBuilder 线程不安全
split 分隔符是正则:
.|等特殊字符要转义,比如split("\\.")
课后练习
写一个方法,判断字符串是否是纯数字
实现:把 "2024-01-15" 按横杠分割,再用斜杠拼接成 "2024/01/15"
用 StringBuilder 反转一个字符串
说明 String、StringBuilder、StringBuffer 的区别

