Java String的split方法忽略空子串

Sac*_*rma 9 java regex arrays string split

今天发生在我身上的java的行为String.split()很奇怪.

实际上我想将一个字符串拆分"aa,bb,cc,dd,,,ee"为数组,.split(",")这给了我一个["aa","bb","cc","dd","","","ee"]长度为7 的String数组.

但是当我尝试将String拆分"aa,bb,cc,dd,,,,"为数组时,这给了我一个长度为4的数组意味着只["aa","bb","cc","dd"]拒绝所有下一个空白字符串.

我想要一个将String拆分"aa,bb,cc,dd,,,,"为数组的过程["aa","bb","cc","dd","","",""].

java.lang.String api有可能吗?提前致谢.

nha*_*tdh 25

使用String.split(String regex, int limit)负限制(例如-1).

"aa,bb,cc,dd,,,,".split(",", -1)
Run Code Online (Sandbox Code Playgroud)

String.split(String regex)被调用时,它被称为与limit= 0,这将删除阵列(在大多数情况下,见下文)中的所有尾随空字符串.

实际行为String.split(String regex)很混乱:

  • 拆分空字符串将导致长度为1的数组.空字符串拆分将始终导致包含空字符串的长度为1的数组.
  • 分裂";"";;;"regex存在";"将导致一个空数组.非空字符串拆分将导致删除数组中的所有尾随空字符串.

从至少Java 5到Java 8可以观察到上述行为.

JDK-6559590中拆分空字符串时,尝试更改行为以返回空数组.然而,它很快就在JDK-8028321中被还原,当它在各个地方引起回归时.这一变化从未进入最初的Java 8版本.