核心方法:String.split()
split()
是Java最常用的字符串拆分方法,基于正则表达式实现。
基本语法:
String[] result = str.split(正则表达式);
简单拆分示例
String text = "apple,banana,orange"; String[] fruits = text.split(","); // 按逗号拆分 // 结果: ["apple", "banana", "orange"]
特殊字符处理
正则表达式中的元字符(如 、、)需用转义符 \
:
String ip = "192.168.1.1"; String[] octets = ip.split("\."); // 转义点号 // 结果: ["192", "168", "1", "1"] String data = "a|b|c"; String[] parts = data.split("\|"); // 转义竖线 // 结果: ["a", "b", "c"]
控制拆分次数
通过第二个参数限制拆分次数:
String text = "one:two:three:four"; String[] result = text.split(":", 2); // 只拆成2段 // 结果: ["one", "two:three:four"]
空字符串处理
- 默认忽略末尾空值:
"a,b,c,,,".split(","); // 结果: ["a", "b", "c"]
- 保留空值需用
-1
参数:"a,b,c,,,".split(",", -1); // 结果: ["a", "b", "c", "", "", ""]
替代方案及适用场景
StringTokenizer
(已过时,不推荐)
适用于简单分隔符,但功能有限:
StringTokenizer tokenizer = new StringTokenizer("java;python;c++", ";"); while (tokenizer.hasMoreTokens()) { System.out.println(tokenizer.nextToken()); } // 输出: java、python、c++
缺点:不支持正则表达式,无法处理复杂规则。
Apache Commons Lang 库
若项目已引入 commons-lang3
,可用 StringUtils.split()
:
import org.apache.commons.lang3.StringUtils; String[] result = StringUtils.split("hello world", " "); // 按空格拆分 // 结果: ["hello", "world"]
优势:更健壮的空值处理,避免 NullPointerException
。
关键注意事项
-
性能问题
split()
依赖正则引擎,频繁调用可能影响性能,对固定分隔符,优先用indexOf()
和substring()
手动拆分:String text = "key=value"; int index = text.indexOf("="); String key = text.substring(0, index); // "key" String value = text.substring(index + 1); // "value"
-
正则表达式优化
复杂正则(如\s+
匹配多个空格)可预编译:Pattern pattern = Pattern.compile("\s+"); String[] words = pattern.split("hello world"); // ["hello", "world"]
-
空值与边界处理
首尾分隔符可能产生空字符串:",a,b".split(","); // 结果: ["", "a", "b"]
最佳实践总结
场景 | 推荐方法 |
---|---|
简单分隔符(如逗号) | String.split() |
需保留末尾空值 | split(regex, -1) |
高性能需求 | 手动 indexOf + substring |
项目已引入第三方库 | Apache Commons StringUtils |
专业建议:优先使用
split()
满足大部分需求,涉及复杂文本解析时考虑正则预编译或专用工具(如OpenCSV解析CSV)。
引用说明参考Oracle官方文档《Java SE 17 String.split()规范》及Apache Commons Lang《StringUtils文档》,确保方法描述的准确性和权威性。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/34934.html