String.split() - 在第一个分隔符之前匹配前导空字符串?

And*_*eiM 5 java regex

我需要能够用逗号,分号或空格(或三者的混合)来分割输入字符串.我还想将输入中的多个连续分隔符视为单个分隔符.这是我到目前为止所拥有的:

String regex = "[,;\\s]+";    
return input.split(regex);
Run Code Online (Sandbox Code Playgroud)

这是有效的,除了输入字符串以其中一个分隔符开头时,在这种情况下,结果数组的第一个元素是一个空字符串.我不希望我的结果有空字符串,所以像",,,, ZERO;,;; ONE,TWO;"这样的东西只返回一个包含大写字符串的三元素数组.

有没有更好的方法来执行此操作,而不是在调用String.split之前删除与我的reg-ex匹配的任何前导字符?

提前致谢!

Bar*_*ers 6

不,没有.您只能通过将0作为String的split()方法的第二个参数来忽略尾随分隔符:

return input.split(regex, 0);
Run Code Online (Sandbox Code Playgroud)

但对于领先的分隔符,你必须先剥离它们:

return input.replaceFirst("^"+regex, "").split(regex, 0);
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 3

如果“更好”意味着更高的性能,那么您可能需要尝试创建一个与您想要匹配的内容相匹配的正则表达式,并Matcher.find在循环中使用并在找到匹配项时拉出匹配项。这样就省去了先修改字符串的麻烦。但请您亲自测量一下,看看哪个对于您的数据来说更快。

如果“更好”意味着更简单,那么不,我认为没有比您建议的方法更简单的方法:在应用分割之前删除前导分隔符。