Java如何截取字符串?
- 后端开发
- 2025-06-03
- 7
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)) // 释放原数组引用
-
文件扩展名提取

-
关键词提取
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字符使用字符数组转换方式更安全
- 外部数据源输入务必做长度校验
- 超长字符串处理关注内存管理
三、替代截取方案
方法 适用场景 示例 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); // "你好"
️ 五、实战应用场景
最佳实践总结
Java字符串截取看似简单,实则涉及编码安全、内存管理、异常处理等专业知识点,建议在关键业务场景增加单元测试覆盖边界情况,例如空字符串、超长索引、多语言字符等,确保功能健壮性。
引用说明:本文内容基于Oracle官方Java 17文档规范,参考《Effective Java》第三版项目实践,并结合Apache Commons Lang工具库的通用设计方案总结而成。