簡體   English   中英

Java字符串拆分在Windows和Linux上提供不同的輸出

[英]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 7Java 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM