[英]Handling newline character in input between Windows and Linux
我認為這是一個標准問題,可能之前曾有人問過,但我無法獲得確切答案,因此發布此問題。
問題是我們的服務器在Linux機器上運行。 我們通過瀏覽器在窗口框上訪問服務器,以將數據輸入到應該包含多行的字段中,用戶可以通過在每行Abc Def GHI之后按Enter鍵來輸入
當在Linux機器上讀取此輸入字段(這是一個文本區域)時,我們要根據換行符分割數據。
我對此有三個問題。
傳入數據是否包含“ \\ r \\ n”或“ \\ n”
如果傳入數據確實包含“ \\ r \\ n”,則linux line.separator屬性(vm屬性)對我不起作用,因為它會說“ \\ n”,因此可能在數據中保留“ \\ r”。
如果數據中留有“ \\ r”,如果我在Windows計算機上打開文件,這是否意味着換行符?
最后,誰能告訴我解決此問題的標准方法?
Linux使用\\n
。
Windows使用\\r\\n
。
因此,除非您在linux中進行過調整,否則它應該在\\n
。
您可以將\\r\\n
和\\n
正則表達式,然后替換為要避免出現問題3的任何內容。
標准的java.io.DataInputStream
和java.io.BufferedInputReader
都通過readLine()方法自動處理此問題。 您確實不應該為此使用DataInputStream
,因為它不正確地支持字符集,並且readLine()已被棄用很長時間了。
對於文本輸出,可以使用java.io.PrintWriter
在其中為printLn())以及帶有參數的相關方法,為當前平台輸出正確的換行符序列。 java.io.BufferedWriter
也可以正確處理此問題,並提供一個public
newLine()方法。
除了使用正則表達式,您還可以通過執行類似的操作使其更簡單。
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的環境,也可以工作。
大概試試這個嗎?
String[] lines = inputString.split("\r?\n");
不是100%知道語法,但是正則表達式的基本思想是:“零或一個\\ r,恰好一個\\ n”。 或者,如果您只想標准化輸入:
inputString = inputString.replace("\r?\n", "\n");
對我來說似乎不是很痛苦。 ;-)
謝謝大家的答復。.最后,看了Kevin的建議,我們在上面使用了StringReader和BufferedReader包裝器來解決該問題。 我們使用字符串讀取器,因為數據是從請求中讀取為字符串。
希望這個問題對以后的人們有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.