2015-06-23 73 views
10

請參閱下面的代碼 -Java字符串分割給Windows上不同的輸出和Linux

String s11 ="!country=India ";  
String[] ss =s11.split("((?<=[!&|])|(?=[!&|]))"); 
System.out.println(ss.length); 
for(String s :ss) { 
    System.out.println(s); 
} 

在Windows上它給

2 
! 
country=India 

而與Ubuntu它給

3 

! 
country=India 

爲什麼會這樣?

+9

來檢查你的JVM的版本什麼是兩種平臺的Java版本? –

+1

Ubuntu的輸出是新線的一部分嗎? – Aderis

+0

它會給你三個部分,在'!'之前和'!'之後進行分割。我不知道java如何獲取第一個空字符串。 –

回答

7

此行爲是因爲不同的操作系統的不是,但可能不同的JVM的版本使用。

這種「行爲改變」造成的錯誤是filed incorrectly爲Java 8.

文檔已爲JDK 8被更新,並在長度in this question,其中分裂中的Java 8除去在空字符串也被討論結果數組開始。這就是爲什麼沒有創建!之前的額外空字符串(因此,長度爲2而不是3)。

通告的Pattern類在用於split()方法in Java 7文檔的差異和在Java 8,和分別string類(Java 7Java 8)。請參閱鏈接的原始問題了解更多信息。我也在Java 7上覆制了這個問題:sun-jdk-1.7.0_10(ideone)和Java 8 sun-jdk-8u25(ideone)。 See the Java versions here.Java 8的拆分將不會將多餘的空字符串添加到數組中,而Java 7的拆分將會。

這不是因爲系統是Linux或Windows,而是JVM版本。你可以用java -version

+0

謝謝...看起來像它...我試着對ideone自己,但7和8都給了我相同的結果(沒有額外的行),但是我只是分叉你的鏈接,並試圖注意你說的話...感謝您的幫助。 – user2931444

+0

@ user2931444很高興你解決了這個問題,這是你找到的一個有趣的行爲。如果答案是正確的並且有幫助,請不要忘記接受答案!歡迎來到SO。 – matrixanomaly