Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java System.lineSeparator()在Windows上未按预期工作_Java_Cross Platform_Newline_Java 7 - Fatal编程技术网

Java System.lineSeparator()在Windows上未按预期工作

Java System.lineSeparator()在Windows上未按预期工作,java,cross-platform,newline,java-7,Java,Cross Platform,Newline,Java 7,我有一个方法,它将字符串作为输入,并从中删除所有空格和换行符。为了实现这一点,我使用java库中的以下方法: public String clean(String s) { return s.replaceAll(System.lineSeparator(),"").replaceAll(" ",""); } 这在Linux下运行良好,但在windows中,它无法删除行分隔符,因为字符串中包含行分隔符 有什么我遗漏的吗?我知道在基于Unix的系统中,换行符是/n,我不知道它在Windo

我有一个方法,它将字符串作为输入,并从中删除所有空格和换行符。为了实现这一点,我使用java库中的以下方法:

public String clean(String s) {
    return s.replaceAll(System.lineSeparator(),"").replaceAll(" ","");
}
这在Linux下运行良好,但在windows中,它无法删除行分隔符,因为字符串中包含行分隔符


有什么我遗漏的吗?我知道在基于Unix的系统中,换行符是/n,我不知道它在Windows中可能是什么,但正如java文档所说,System.lineSeparator()方法应该提供一个独立于平台的行分隔符。

我建议您在删除空格时尝试此方法

public static String clean(String s) {
    return s.replaceAll("\\s+", "");
}

我怀疑您遇到的问题是,您正在linux盒上读取windows上编写的文件。您的代码不会删除Windows上额外的
\r

请尝试替换所有
\n
以及
\r\n
。是的,lineSeparator应该解决这个问题,但可能没有解决。

在windows中,有时\r\n这可能就是问题所在?@williammerrison甚至
\r\n
;)谢谢,注意到你也编辑了你的帖子。好极了。搞定了,一个linux盒子?你是说虚拟机吗?我已经在两台不同的计算机上测试过了,都运行windows,而不是虚拟机。但无论如何,我很好奇,Windows虚拟机中的JVM不是Windows的版本吗,因此具有正确的换行符吗?根据定义,所有Windows系统上的JVM都是相同的。更有可能的是,这些文件并不完全相同。我可以看出我使用的文件是相同的,因为它打包在jar文件中。无论如何,您的“\\s+”运行得很好,但我认为它只是\\s,这与\\s+有什么区别,\\s对我来说不起作用,所以我很好奇。根据我的经验,当有人提到linux盒、windows盒等时,他们通常指的是安装了该操作系统的物理计算机。正如皮特所说,在代码方面应该没有区别。@Setzer22使用
\\s+
是一种微优化。这意味着如果可以,可以一次替换多个空格,而不是一次替换一个空格。否则,它也会执行与
\\s
完全相同的操作。我会检查您使用的Java版本或重新安装Java,因为如果这也会造成影响,我会怀疑您的版本已损坏。我使用了\\s+,它引用了Peter在另一个答案中指出的所有类似空格/换行符的字符,它起了作用,但我仍然好奇lineSeparator为什么不返回完整的\r\n字符串…啊,好的,这让我感觉好多了。我甚至不知道\\s!一定要接受他的回答。