引言
在java算法题和日常开发中,字符串处理是必备的核心技能。本文全面梳理java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字符串处理技巧,轻松应对笔试面试高频题目。
1. 基础操作
1.1 创建字符串
// 方式1:直接赋值(推荐) string s1 = "hello"; // 方式2:构造函数 string s2 = new string("hello");
特点:
- 直接赋值会复用字符串常量池对象,内存更高效
new
会强制创建新对象,地址不同
1.2 获取长度
int len = s1.length(); // 5
应用场景:遍历字符串、判空操作
注意:空字符串""
的长度为0
1.3 访问字符
char c = s1.charat(1); // 'e'
经典应用:回文串判断
// 判断回文示例 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; }
2. 字符串处理
2.1 子字符串提取
// 截取从索引1到末尾 string sub1 = s1.substring(1); // "ello" // 截取索引1到3(左闭右开) string sub2 = s1.substring(1, 3); // "el"
应用场景:
- 提取文件名后缀
- 解析特定格式字符串(如日期)
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();
性能对比:
- 单次拼接:
+
更简洁 - 循环拼接:必须用
stringbuilder
2.3 字符串查找
// 查找字符位置 int index1 = s1.indexof('e'); // 1 int lastindex = s1.lastindexof('l'); // 3 // 查找子串位置 int index2 = s1.indexof("llo"); // 2
返回值:找到返回索引,未找到返回-1
2.4 字符串替换
// 简单替换 string s5 = s1.replace('l', 'l'); // "hello" // 正则替换(所有元音替换为*) string s6 = s1.replaceall("[aeiou]", "*"); // "h*ll*"
注意:
replaceall
第一个参数是正则表达式- 特殊字符需转义,如
replaceall("\\+", "-")
3. 高级操作
3.1 字符串分割
// 按逗号分割 string[] arr1 = "a,b,c".split(","); // ["a", "b", "c"] // 按点分割(需转义) string[] arr2 = "a.b.c".split("\\.");
应用场景:解析csv数据、日志分析
3.2 类型转换
// 字符串 ↔ 字符数组 char[] chars = s1.tochararray(); string s7 = new string(chars); // 其他类型 → 字符串 string s8 = string.valueof(123); // "123" string s9 = integer.tostring(456); // "456"
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}");
应用场景:数据校验、格式检查
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); }
5. 总结
关键知识点
- 不可变性:string对象创建后不可修改,修改操作会生成新对象
- 比较原则:内容比较必须用
equals()
,==
比较对象地址 - 性能陷阱:避免在循环中使用
+
拼接字符串 - 工具选择:根据场景选择string/stringbuilder/stringbuffer
高频算法题应用
- 字符串反转:使用双指针或stringbuilder
- 子串查找:kmp算法(可结合
indexof
优化) - 括号匹配:栈+字符遍历
掌握这些字符串操作技巧,能显著提升算法题的解决效率。建议结合leetcode等平台的字符串分类题目进行实战练习(如leetcode 344. 反转字符串)。
到此这篇关于java字符串操作全解析:语法、示例与应用场景的文章就介绍到这了,更多相关java字符串操作内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
海报
145