2017-06-06 176 views
0

考虑下面带有分隔符__|__的字符串。Java中的String.split与StringUtils.split给出了不同的结果

String str = "a_b__|__c_d"; 

str.split("__\\|__")给出2个分裂A_B和C_D StringUtils.split(str, "__|__") or StringUtils.split(str, "__\\|__")给出4分割一个,B,C,这是不期望d。

有什么办法让StringUtils.split()给出相同的结果String.split()?

+2

改为使用StringUtils.splitByWholeSeparator! – nCessity

回答

3

String.split()有一些very surprising语义,它很少是你想要的。你应该更喜欢StringUtils(或番石榴的Splitter,在前面的链接讨论)。

您的特定问题是String.split()需要正则表达式,而StringUtils.split()将每个字符用作单独的标记。您应该使用StringUtils.splitByWholeSeparator()分割完整字符串的内容。

StringUtils.splitByWholeSeparator(str, "__|__"); 
+0

我推荐与PHP的爆炸相匹配的StringUtils.splitByWholeSeparatorPreserveAllTokens(“ - a - b-”,“ - ”) - > [“”,“a”,“”,“b”,“”] -a - b-“) - > [”“,”a“,”“,”b“,”“]。 StringUtils.splitByWholeSeparator(“ - a - b-”,“ - ”)返回[“a”,“b”,“”],这是我意想不到的。 –

+0

一般来说,匹配PHP语义可能是一个反目标;) – dimo414

1

不,根据文档,StringUtils.split的第二个参数是被认为是分隔符的所有字符的列表。 在Apache Commons中有一个不同的功能,它可以做你想做的事 - StringUtils.splitByWholeSeparator。尽管如此,我仍然没有发现简单的String.split有什么问题。

+0

谢谢。我没有意识到这种方法存在。那么我可以使用String.split(),但我更喜欢StringUtils。 splitByWholeSeparator()还需要空字符串。 – user1013528

相关问题