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

Java中String.split("\\s")返回数组含空串的原因及实例疑问解答

关于Java String.split("\s")的两个问题解答

问题1:为什么String.split("\\s")返回的数组里会有空字符串?

其实核心原因和两个点有关:正则匹配规则,以及Java split方法的默认行为。

  • 首先,\\s是正则表达式里的元字符,用来匹配任意空白字符——包括普通空格、制表符\t、换行符\n这些,单个空白就会触发一次匹配。
  • Java的split(regex)方法默认用的是limit=0的模式:这个模式会自动丢弃数组末尾的空字符串,但开头或者中间的空字符串会保留。

举两个常见的场景:

  • 如果字符串开头就有空白,比如" hello world",开头的两个空格会被\\s分别匹配两次,每次匹配前都没有有效内容,所以数组开头就会多出两个空字符串:["", "", "hello", "world"]。
  • 如果字符串中间有连续空白,比如"hello world"(两个空格),第一个空格把hello和后面的内容分开,第二个空格匹配时,它前面的内容是空的,所以数组中间就会插入一个空字符串:["hello", "", "world"]。

问题2:给定句子拆分后出现的空字符串来自哪里?

先把你给出的句子贴出来:

"The brown fox jumped the fence jumped. The jumped fox? The fox. Jumped"

按\\s拆分后出现空字符串,大概率是因为句子里存在这两种情况之一:

  1. 连续的空白字符:比如句子里某两个单词之间不是一个空格,而是两个(或更多)空格。比如如果原句子里jumped.和The之间是两个空格,那拆分时这两个空格会被分别匹配,中间就会生成一个空字符串。
  2. 开头的空白字符:如果句子最开头有一个(或多个)空格,那第一个匹配的空白前没有内容,数组的第一个元素就会是空字符串。

另外还有一种可能:句子里混入了看不见的空白字符(比如制表符或者换行符),这些字符也会被\\s匹配,如果和普通空格连续出现,同样会生成空字符串。

顺便提一句:如果你只想得到单词(或带标点的单词),完全可以用split("\\s+")代替split("\\s")。\\s+会匹配一个或多个连续空白字符,不管有多少空白都当作一个分隔符,这样就不会生成中间的空字符串了。如果连开头的空字符串也想去掉,可以先对句子做trim()处理,再用split("\\s+"),结果就完全符合你的预期啦。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:32:38