Java 字符串拆分在 Windows 和 Linux 上给出不同的输出

标签 java string split

请看下面的代码--

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

这种“行为改变”导致错误为filed incorrectly适用于 Java 8。

文档已针对 JDK 8 进行了更新,并且还进行了详细讨论 in this question,其中,Java 8 中的拆分会删除结果数组开头的空字符串。这就是为什么 ! 之前没有创建额外的空字符串(因此长度为 2 而不是 3)。

请注意 split() 方法文档中的差异 in Java 7Java 8分别为 Pattern 类和字符串类( 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

仔细检查您的 JVM 版本

关于Java 字符串拆分在 Windows 和 Linux 上给出不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31009769/

相关文章:

java - 了解在 Web 容器中启动 Spring 批处理作业

java - 如何使用java自动从日历中选择特定日期

Java找到解决检查连续数字的最佳方法[算法]

python - 将列表中的字符串加在一起

java - 如何扩展/编辑 Netbeans 自动生成的 REST 服务?

string - Delphi 相当于 VB "Space"

c++ - 用户输入字符串并计算字母实例的程序

c++ - 是否可以从某个对象的中间部分取消分配内存和 "split"呢?

java - StringReader 从 String.Split 输出中给出错误

cocoa - 使用 COCOA 将 PDF 页面转换为图像