[英]Java string split gives different outputs on Windows and 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
那為什么會這樣?
此行為不是因為操作系統不同 ,而是可能使用不同版本的JVM 。
這種“行為改變”導致Java 8錯誤歸檔 。
該文檔已針對JDK 8進行了更新,並且在此問題中也進行了詳細討論,其中Java 8中的split在結果數組的開頭刪除了空字符串 。 這就是為什么額外的空字符串之前!
未創建(因此長度為2而不是3)。
請注意Java 7中的split()
方法和Pattern
8中的Pattern
類以及字符串類( Java 7 , Java 8 )的文檔區別。 請參閱原始問題,以獲取有關此內容的更多信息。
我還在Java 7上重現了這個問題:sun-jdk-1.7.0_10( ideone )和Java 8 sun-jdk-8u25( ideone )。 請在此處查看Java版本。 Java 8的拆分將不提供額外的空字符串到數組,而Java 7的拆分將。
這不是因為系統是Linux或Windows,而是JVM版本。 您可以使用java -version
仔細檢查JVM的版本
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.