2015-06-23 51 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