You need to enable JavaScript to run this app. Java中如何仅按单个竖线分割字符串、保留连续竖线不拆分
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何仅按单个竖线分割字符串、保留连续竖线不拆分

Java 单字符拆分且不拆分连续同分隔符的实现方案

原有代码不符合预期的核心原因

  • String.split() 的入参本质是正则表达式,不是普通字面量字符串。| 是正则中的特殊元字符,代表“逻辑或”匹配规则,直接传入"|"实际等价于匹配任意两个字符间的位置,根本达不到按竖线拆分的效果。
  • 即便对竖线做正确转义,默认拆分逻辑会把连续出现的分隔符识别为多个独立拆分边界,拆出空字符串,也不符合“连续同分隔符不触发拆分”的需求。

实现匹配预期的拆分规则

要达成拆分"data1|data2||data3"得到["data1", "data2||data3"]的效果,需要通过正则规则做两个约束:

  1. 转义正则特殊字符,让匹配目标变为字面量的|字符
  2. 增加前后置断言,只有前后都不相邻同分隔符的单个分隔符,才会被认定为拆分边界,连续出现的分隔符不触发拆分

可直接复用的实现代码

String data = "data1|data2||data3";
// 正则规则拆解:
// \\| 转义后匹配字面量竖线
// (?<!\\|) 负向后行断言:当前匹配的竖线前面没有相邻的其他竖线
// (?!\\|) 负向前行断言:当前匹配的竖线后面没有相邻的其他竖线
// 整体逻辑:只有完全独立的单个|才会作为拆分切分点
String[] arrayData = data.split("(?<!\\|)\\|(?!\\|)");

拆分结果完全匹配预期:

  • arrayData[0] = "data1"
  • arrayData[1] = "data2||data3"

通用提示:如果分隔符是其他普通字符(比如逗号、短横线),可以直接套用上述断言规则,只需要把正则里的竖线替换成对应分隔符即可。例如要按逗号拆分、连续逗号不触发拆分,可使用正则"(?<!,),(?!,)"。


内容的提问来源于stack exchange,提问作者rajeev tejapuriya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.08 19:36:03