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