繁体   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