簡體   English   中英

在Windows和Linux之間處理輸入中的換行符

[英]Handling newline character in input between Windows and Linux

我認為這是一個標准問題,可能之前曾有人問過,但我無法獲得確切答案,因此發布此問題。

問題是我們的服務器在Linux機器上運行。 我們通過瀏覽器在窗口框上訪問服務器,以將數據輸入到應該包含多行的字段中,用戶可以通過在每行Abc Def GHI之后按Enter鍵來輸入

當在Linux機器上讀取此輸入字段(這是一個文本區域)時,我們要根據換行符分割數據。

我對此有三個問題。

  1. 傳入數據是否包含“ \\ r \\ n”或“ \\ n”

  2. 如果傳入數據確實包含“ \\ r \\ n”,則linux line.separator屬性(vm屬性)對我不起作用,因為它會說“ \\ n”,因此可能在數據中保留“ \\ r”。

  3. 如果數據中留有“ \\ r”,如果我在Windows計算機上打開文件,這是否意味着換行符?

最后,誰能告訴我解決此問題的標准方法?

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

因此,除非您在linux中進行過調整,否則它應該在\\n

您可以將\\r\\n\\n正則表達式,然后替換為要避免出現問題3的任何內容。

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

標准的java.io.DataInputStreamjava.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM