
本文介绍如何利用 Java 的 split() 方法配合负向先行断言(negative lookbehind),精准识别非转义逗号作为分隔符,避免误切被反斜杠(或任意配置字符)转义的逗号,兼顾性能与可维护性。
本文介绍如何利用 java 的 `split()` 方法配合负向先行断言(negative lookbehind),精准识别非转义逗号作为分隔符,避免误切被反斜杠(或任意配置字符)转义的逗号,兼顾性能与可维护性。
在处理 CSV 风格字符串时,一个常见需求是:以英文逗号 , 为分隔符进行分割,但被转义的逗号(如 ,)不应触发分割。例如:
-
"one,two,three"→["one", "two", "three"] -
"one,two,three"→["one", "two,three"]
直接使用 str.split(",") 会错误地将 , 中的 , 也当作分隔符;而手动遍历字符虽可行,但代码冗长、易错且难以复用。
✅ 推荐方案:负向先行断言(Negative Lookbehind)
Java 的 String.split() 支持完整正则表达式,其中 (? 是负向先行断言——它匹配一个位置,要求该位置左侧不紧邻指定模式。因此,我们可构造正则:(?,含义是:“匹配一个逗号,且其前面不能是一个反斜杠 ”。
注意:由于 Java 字符串和正则双重转义,\ 在字符串中表示单个 ,所以 \\ 最终对应正则中的 \(即字面量反斜杠)。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











