You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中String类split方法空字符串产生场景及正则分割示例解析

关于Java String.split()产生空字符串的原因及正则等价性解释

咱们先把问题拆成两个部分逐一解释:

一、"a|g"与[ag]等价的具体含义

在正则表达式里:

  • "a|g"中的|是逻辑或操作符,它表示匹配单个a字符或者单个g字符。这里的|针对的是单个字符的或操作,因为两边都是单个字符的正则单元。
  • [ag]是正则字符类,它的作用就是匹配方括号内列出的任意一个字符——也就是要么匹配a,要么匹配g。

所以这两个正则表达式在匹配规则上完全一致,针对单个字符的匹配效果100%等价,用它们来分割字符串会得到完全相同的结果。

二、示例中sp[1]和sp[2]为空字符串的原因

先把原字符串拆解开看清楚结构:"Hello again"的字符序列是:H e l l o (空格)a g a i n

split(String regex)的核心逻辑是:找到所有匹配正则表达式的位置,将相邻匹配位置之间(或字符串开头到第一个匹配位置、最后一个匹配位置到字符串结尾)的子串作为数组元素。咱们一步步对应示例分析:

  1. 第一个匹配的是空格后的a:从字符串开头到这个a之前的子串是"Hello ",对应sp[0]。
  2. 紧接着这个a之后的下一个匹配是紧跟的g:这两个匹配位置(a的结束位置和g的开始位置)之间没有任何字符,所以这部分的子串就是空字符串"",对应sp[1]。
  3. 再往后,g之后的下一个匹配是后面的a:同样,g的结束位置和这个a的开始位置之间没有字符,所以这部分子串也是空字符串"",对应sp[2]。
  4. 最后,这个a之后到字符串结尾的子串是"in",对应sp[3]。

简单总结:当正则表达式的匹配结果连续出现时,两个相邻匹配点之间没有任何字符,就会产生空字符串元素。另外补充个小知识点:如果字符串开头就匹配正则,第一个元素会是空字符串;而默认的split会忽略字符串结尾的空元素(如果想保留,需要用带limit参数的重载方法split(regex, -1))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 04:17:37