处理Windows和Linux之间输入中的换行符

时间:2010-03-09 00:22:40

标签: java

我认为这是一个标准问题,可能之前曾被问过,但我无法得到确切答案,所以发布问题。

问题是我们的服务器在linux机器上运行。我们通过浏览器在一个窗口框中访问服务器,将数据输入到字段中,该字段应包含多行,用户可以通过在每行后按Enter键进入该行 ABC 高清 GHI

当这个输入字段(这是一个文本区域),在linux机器上读取时,我们想要根据新行字符分割数据。

我有三个问题。

  1. 传入的数据是否包含“\ r \ n”或“\ n”

  2. 如果传入的数据确实包含“\ r \ n”,则linux line.separator属性(vm属性)对我不起作用,因为它会说“\ n”,因此可能会留下“\ r”数据。

  3. 如果数据中还有“\ r”,如果我在Windows机器上打开文件,这是否意味着换行符?

  4. 最后有人能告诉我处理这个问题的标准方法吗?

5 个答案:

答案 0 :(得分:3)

Linux使用\n Windows使用\r\n

因此,除非你在linux中调整了某些东西,否则应该进入\n

您可以将\r\n\n重新标记,并替换为您想要避免的任何问题3。

http://en.wikipedia.org/wiki/Newline

答案 1 :(得分:3)

标准java.io.DataInputStreamjava.io.BufferedInputReader都通过readLine()方法自动处理。你真的不应该使用DataInputStream,因为它不能正确支持字符集,并且readLine()已经被弃用了很长时间。

对于文本输出,您可以使用其中printLn()的java.io.PrintWriter和带参数的相关方法,为当前平台输出正确的换行序列。 java.io.BufferedWriter也正确处理此问题并提供public newLine()方法。

答案 2 :(得分:1)

除了使用正则表达式,您还可以通过执行类似的操作来简化它。

StringBuilder sb=new StringBuilder();
// append your texts here and to go to a new line use
    if(System.getProperty("os.name").startsWith("Windows")){

                sb.insert("\r\n");
            }
            else {
            sb.insert("\n");
    }

因此,如果您的本地环境是Windows,那么您可以在本地使用它,如果您正在部署到不同的基于Linux的环境,也可以使用它。

答案 3 :(得分:0)

可能试试这个吗?

String[] lines = inputString.split("\r?\n");

不是100%确定语法,但正则表达式的基本思想是:“零或一个\ r \ n,恰好一个\ n”。或者,如果您只想标准化输入:

inputString = inputString.replace("\r?\n", "\n");

对我来说似乎并不痛苦。 ; - )

答案 4 :(得分:-1)

感谢回复人员..最后看看Kevin给出的建议,我们使用StringReader和BufferedReader包装来克服这个问题。我们使用字符串阅读器作为数据从请求中读取为字符串。

希望这个问题可以帮助人们将来