引言
在Java算法题和日常开发中,字符串处理是必备的核心技能。本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字符串处理技巧,轻松应对笔试面试高频题目。
1. 基础操作
1.1 创建字符串
// 方式1:直接赋值(推荐)
String s1 = "Hello";
// 方式2:构造函数
String s2 = new String("Hello");
1
2
3
4
5
特点:
直接赋值会复用字符串常量池对象,内存更高效
new会强制创建新对象,地址不同
1.2 获取长度
int len = s1.length(); // 5
1
应用场景:遍历字符串、判空操作
注意:空字符串""的长度为0
1.3 访问字符
char c = s1.charAt(1); // 'e'
1
经典应用:回文串判断
// 判断回文示例
public boolean isPalindrome(String s) {
int left = 0, right = s.length() - 1;
while (left < right) {
if (s.charAt(left++) != s.charAt(right--)) return false;
}
return true;
}
1
2
3
4
5
6
7
8
2. 字符串处理
2.1 子字符串提取
// 截取从索引1到末尾
String sub1 = s1.substring(1); // "ello"
// 截取索引1到3(左闭右开)
String sub2 = s1.substring(1, 3); // "el"
1
2
3
4
5
应用场景:
提取文件名后缀
解析特定格式字符串(如日期)
2.2 字符串拼接
// 方式1:+运算符(编译时优化)
String s3 = s1 + " World!";
// 方式2:concat方法
String s4 = s1.concat(" World!");
// 方式3:StringBuilder(高效)
StringBuilder sb = new StringBuilder();
sb.append(s1).append(" World!");
String result = sb.toString();
1
2
3
4
5
6
7
8
9
10
性能对比:
单次拼接:+更简洁
循环拼接:必须用StringBuilder
2.3 字符串查找
// 查找字符位置
int index1 = s1.indexOf('e'); // 1
int lastIndex = s1.lastIndexOf('l'); // 3
// 查找子串位置
int index2 = s1.indexOf("llo"); // 2
1
2
3
4
5
6
返回值:找到返回索引,未找到返回-1
2.4 字符串替换
// 简单替换
String s5 = s1.replace('l', 'L'); // "HeLLo"
// 正则替换(所有元音替换为*)
String s6 = s1.replaceAll("[aeiou]", "*"); // "H*ll*"
1
2
3
4
5
注意:
replaceAll第一个参数是正则表达式
特殊字符需转义,如replaceAll("\\+", "-")
3. 高级操作
3.1 字符串分割
// 按逗号分割
String[] arr1 = "a,b,c".split(","); // ["a", "b", "c"]
// 按点分割(需转义)
String[] arr2 = "a.b.c".split("\\.");
1
2
3
4
5
应用场景:解析CSV数据、日志分析
3.2 类型转换
// 字符串 ↔ 字符数组
char[] chars = s1.toCharArray();
String s7 = new String(chars);
// 其他类型 → 字符串
String s8 = String.valueOf(123); // "123"
String s9 = Integer.toString(456); // "456"
1
2
3
4
5
6
7
3.3 正则匹配
// 验证是否全数字
boolean isNumber = "123".matches("\\d+"); // true
// 提取邮箱格式
String email = "test@example.com";
boolean isValid = email.matches("[a-zA-Z0-9]+@[a-z]+\\.[a-z]{2,3}");
1
2
3
4
5
6
应用场景:数据校验、格式检查
4. 性能优化
4.1 选择合适的数据结构
场景 推荐类型 原因
高频修改字符串 StringBuilder 非线程安全但速度快
多线程环境修改 StringBuffer 线程安全
只读操作 String 不可变特性保证安全性
4.2 高效操作示例
案例:反转字符串
// 方法1:StringBuilder
public String reverse1(String s) {
return new StringBuilder(s).reverse().toString();
}
// 方法2:字符数组
public String reverse2(String s) {
char[] arr = s.toCharArray();
int left = 0, right = arr.length - 1;
while (left < right) {
char temp = arr[left];
arr[left++] = arr[right];
arr[right--] = temp;
}
return new String(arr);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
5. 总结
关键知识点
不可变性:String对象创建后不可修改,修改操作会生成新对象
比较原则:内容比较必须用equals(),==比较对象地址
性能陷阱:避免在循环中使用+拼接字符串
工具选择:根据场景选择String/StringBuilder/StringBuffer
高频算法题应用
字符串反转:使用双指针或StringBuilder
子串查找:KMP算法(可结合indexOf优化)
括号匹配:栈+字符遍历
掌握这些字符串操作技巧,能显著提升算法题的解决效率。建议结合LeetCode等平台的字符串分类题目进行实战练习(如LeetCode 344. 反转字符串)。