我认为这是一个标准问题,可能之前曾被问过,但我无法得到确切答案,所以发布问题。
问题是我们的服务器在linux机器上运行。我们通过浏览器在一个窗口框中访问服务器,将数据输入到字段中,该字段应包含多行,用户可以通过在每行后按Enter键进入该行 ABC 高清 GHI
当这个输入字段(这是一个文本区域),在linux机器上读取时,我们想要根据新行字符分割数据。
我有三个问题。
传入的数据是否包含“\ r \ n”或“\ n”
如果传入的数据确实包含“\ r \ n”,则linux line.separator属性(vm属性)对我不起作用,因为它会说“\ n”,因此可能会留下“\ r”数据。
如果数据中还有“\ r”,如果我在Windows机器上打开文件,这是否意味着换行符?
最后有人能告诉我处理这个问题的标准方法吗?
答案 0 :(得分:3)
Linux使用\n
Windows使用\r\n
。
因此,除非你在linux中调整了某些东西,否则应该进入\n
。
您可以将\r\n
和\n
重新标记,并替换为您想要避免的任何问题3。
答案 1 :(得分:3)
标准java.io.DataInputStream
和java.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包装来克服这个问题。我们使用字符串阅读器作为数据从请求中读取为字符串。
希望这个问题可以帮助人们将来