上一篇
Java如何截取字符串?
- 后端开发
- 2025-06-03
- 2818
在Java中,使用
String.substring()
方法截取字符串,传入起始索引(从0开始)可截取到末尾,如
str.substring(2)
;传入起始和结束索引则截取指定区间(含头不含尾),如
str.substring(2,5)
,需确保索引合法,避免越界异常。
Java字符串截取完全指南:方法与最佳实践
在Java开发中,字符串截取是最常用的基础操作之一,下面全面解析Java中各种字符串截取方法及其应用场景:
一、核心方法:substring()
substring()
是Java原生字符串截取的核心方法,有两种重载形式:
// 示例字符串 String text = "Hello,Java开发者!"; // 1. 单参数截取:从指定索引到末尾 String result1 = text.substring(7); // "Java开发者!" System.out.println(result1); // 2. 双参数截取:指定起止索引(含头不含尾) String result2 = text.substring(7, 11); // "Java" System.out.println(result2);
关键特性:
- 索引从0开始计数(首个字符索引为0)
- 终止索引对应的字符不包含在结果中
- 支持中文等Unicode字符(底层基于UTF-16)
️ 二、使用注意事项
-
索引越界问题
- 触发
StringIndexOutOfBoundsException
异常 - 防御性代码示例:
int start = 20; if(start >= 0 && start <= text.length()) { String sub = text.substring(start); } else { // 处理异常情况 }
- 触发
-
性能优化
- JDK 7u6+版本:
substring
创建新字符数组(避免内存泄漏) - 大文本处理建议:
new String(text.substring(start, end)) // 释放原数组引用
- JDK 7u6+版本:
三、替代截取方案
方法 | 适用场景 | 示例 |
---|---|---|
split() |
按分隔符截取 | text.split(",")[0] |
正则表达式 | 复杂模式匹配 | text.replaceAll("^.*?(Java).*", "$1") |
StringUtils (Apache) |
增强空安全处理 | StringUtils.substring(text, 5, 9) |
正则表达式场景示例:提取括号内内容
String input = "订单号(ORD-2025)"; Pattern pattern = Pattern.compile(".*?\((.*?)\)"); Matcher matcher = pattern.matcher(input); if(matcher.find()) { System.out.println(matcher.group(1)); // ORD-2025 }
四、特殊编码处理
处理多字节字符(如中文)时需注意:
String chinese = "你好世界"; // 错误做法:可能截断多字节字符 String badCut = chinese.substring(0, 1); // 可能得到乱码 // 正确方案:按字符数截取 int charCount = 2; String safeCut = new String(chinese.toCharArray(), 0, charCount); // "你好"
️ 五、实战应用场景
-
文件扩展名提取
String filename = "document.pdf"; String ext = filename.substring(filename.lastIndexOf(".") + 1);
-
关键词提取
String content = "【紧急通知】系统维护时间:2025-10-01"; int start = content.indexOf(":") + 1; String date = content.substring(start); // 2025-10-01
-
数据脱敏处理
String phone = "13800138000"; String masked = phone.substring(0, 3) + "****" + phone.substring(7); // 138****8000
最佳实践总结
- 常规截取优先选用
substring()
,注意索引范围控制 - 复杂匹配考虑正则表达式,但需注意性能开销
- 中文等Unicode字符使用字符数组转换方式更安全
- 外部数据源输入务必做长度校验
- 超长字符串处理关注内存管理
Java字符串截取看似简单,实则涉及编码安全、内存管理、异常处理等专业知识点,建议在关键业务场景增加单元测试覆盖边界情况,例如空字符串、超长索引、多语言字符等,确保功能健壮性。
引用说明:本文内容基于Oracle官方Java 17文档规范,参考《Effective Java》第三版项目实践,并结合Apache Commons Lang工具库的通用设计方案总结而成。