use*_*444 11 java string split
请看下面的代码 -
String s11 ="!country=India ";
String[] ss =s11.split("((?<=[!&|])|(?=[!&|]))");
System.out.println(ss.length);
for(String s :ss) {
System.out.println(s);
}
Run Code Online (Sandbox Code Playgroud)
在Windows上,它给出了
2
!
country=India
Run Code Online (Sandbox Code Playgroud)
而Ubuntu给出了它
3
!
country=India
Run Code Online (Sandbox Code Playgroud)
那为什么会这样?
此行为不是因为操作系统不同,而是可能使用不同版本的JVM.
这种"行为改变"导致Java 8 错误归档.
该文档已针对JDK 8进行了更新,并且在此问题中也进行了详细讨论,其中Java 8中的split在结果数组的开头删除了空字符串.这就是为什么!
没有创建额外的空字符串(因此长度为2而不是3).
注意在文档中的差异split()
的方法中的Java 7和爪哇8为Pattern
类和字符串类(爪哇7,爪哇8)分别.请参阅原始问题,以获取有关此内容的更多信息.
我还在Java 7上重现了这个问题:sun-jdk-1.7.0_10(ideone)和Java 8 sun-jdk-8u25(ideone).请在此处查看Java版本. Java 8的拆分将不提供额外的空字符串到数组,而Java 7的拆分将.
这不是因为系统是Linux或Windows,而是JVM版本.你可以仔细检查你的JVM版本java -version
归档时间: |
|
查看次数: |
1030 次 |
最近记录: |