2017-06-06 130 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

相關問題