2015-07-20 77 views
2

如果我拆分「hello |」「| hello」 with 「|」字符,然後我得到第一個值和第二個版本的兩個值。Java字符串拆分不一致

String[] arr1 = new String("hello|").split("\\|"); 
String[] arr2 = new String("|hello").split("\\|"); 
System.out.println("arr1 length: " + arr1.length + "\narr2 length: " + arr2.length); 

此打印出:

ARR1長度:1
ARR2長度:2

這是爲什麼?

+1

'split(String regex)' - *此方法的工作原理與通過調用具有給定表達式和極限參數爲零的雙參數拆分方法一樣。尾隨空字符串因此不包含在結果數組中。* –

+0

檢查此問題http://stackoverflow.com/questions/15113272/java-split-by-a-successive-character/15113300#15113300 – m0skit0

+0

還檢查[this]( http://stackoverflow.com/a/19503404/3841803) – silentprogrammer

回答

8

根據java docssplit如果第一個字符是分隔符,則創建一個空字符串,但如果最後一個字符(或連續字符)是分隔符,則不創建空字符串(或空字符串)。無論您使用的分隔符如何,您都會得到相同的行爲。

+1

「*無論使用什麼分隔符,您都會得到相同的行爲*」,這取決於Java版本。在前8段,當我們使用split(「」)'時,我們總是以空字符串開始,但現在(在Java 8中)我們不會(與其他零長度正則表達式相同)。 – Pshemo

+0

@Pshemo有趣。我不知道。謝謝。 – Eran

+0

更多信息在這裏https://stackoverflow.com/questions/22718744/why-does-split-in-java-8-sometimes-remove-empty-strings-at-start-of-result-array – Pshemo

3

尾隨空字符串將不會包含在數組中檢查以下語句。

String#split 此方法類似於調用與 兩個參數分割方法給定表達式和零限制參數。 尾隨的空 字符串因此不包含在結果數組中。

1

String#split總是返回通過拆分這個字符串圍繞給定的正則表達式的匹配計算的字符串數組。