一個能處理全部五種標準化斷行符記——CRLF、CR、LF、U+2028 與 U+2029——卻不會合併其他空白字元的換行移除替代工具,正是瀏覽器型工具應該具備的樣貌。Line Break Remover 會在目前分頁內完全於本地端處理貼上的文字,取代或移除可識別的換行字元,並讓每個空格、Tab、不斷行空格,以及所有非換行的前後字元都維持原樣。CRLF 算成單一符記而非兩次移除,只有直接相連的換行符記才會被視為段落連續,夾在兩個換行之間的空格、Tab 或 NBSP 則會刻意保留,使它們留在不同的連續群組中。輸出結果包含明確的偵測與移除符記計數、可直接複製的結果,以及當你超過 1,000,000 個 UTF-16 字碼單位的輸入預算或提交空白文字時清楚的錯誤訊息。三種取代模式——每個符記換成一個空格、空字串,或保留段落的標準化——都能在處理前切換,而編輯輸入或變更模式會立即清除先前的結果。

大多數搜尋「替代工具」的讀者,並不是想要一份功能清單。他們早就試過那種會把兩個單字黏在一起、剝除縮排、換掉花式引號,或偷偷把貼上文字送上伺服器的換行移除工具。他們想要的轉變,是從那些行為走向一個能分辨「換行是什麼、不是什麼」的工具:唯一應該改動的,只有換行本身。

line break remover alternative
Line Break Remover 替代方案:保留空格,不上傳

換行移除替代工具實際必須做到的事

一個值得信賴的替代工具必須同時滿足四個條件:識別每一個能結束一行的字元、如實計算、不動其他所有東西,並且在本地端執行。少做任何一項,這個工具就會變成讀者想離開的那一類工具。

  • 識別所有斷行形式。CRLF、單獨的 CR、單獨的 LF、Unicode U+2028 LINE SEPARATOR,以及 Unicode U+2029 PARAGRAPH SEPARATOR,都可能出現在貼上的文字中。單獨的 CR 仍會出現在較舊的 Mac 檔案、匯出的記錄與部分匯入資料中。U+2028 與 U+2029 即使在視覺上不明顯,也可能出現在從文件系統複製的文字裡。
  • 計算符記而非字碼單位。CRLF 是兩個字碼單位,卻是一個斷行。任何把 CRLF 算成兩次移除的工具,都隱瞞了文件中實際發生的事。
  • 不要動到非換行的空白。重複的空格、Tab、不斷行空格、前置縮排與尾端空白,常帶有意義。換行工具不該搖身一變成為偽裝的空白標準化工具。
  • 在本地端執行。貼上的文字可能是敏感的:草稿、合約、客戶名單或私人提示詞。會把輸入上傳到伺服器的換行移除工具,在隱私上並不比手動處理更好。

其他工具會悄悄破壞文字的地方

「移除換行」的搜尋結果塞滿了在單一功能上看起來不錯、卻在小細節上失分的工具。這些模式反覆出現,頻率高到值得並列比較。

讀者期待的行為許多工具實際的作法Line Break Remover 的作法
將 CRLF 視為一次斷行把 CRLF 算成兩次移除將 CRLF 視為一個合併符記來計算與移除
保留既有的空格與 Tab合併重複空格或修剪頭尾讓每個非換行字元都留在原位
識別 U+2028 與 U+2029忽略它們或將它們顯示為亂碼與 CRLF、CR、LF 一起偵測並轉換
保留段落邊界對所有斷行套用同一規則提供獨立的保留段落模式,並嚴格偵測連續群組
顯示改動內容只顯示輸出回報偵測、移除與剩餘的符記數量
在隱私下執行將輸入送至遠端端點在目前分頁內完全於本地端處理每個字元

「順便合併其他空白」這個模式傷害最大,因為讀者通常要等到把輸出貼到別處才會注意到。一行原本以兩個刻意縮排空格開頭,結果只剩一個空格;程式碼片段裡的 Tab 變成一欄;軟連字號直接消失。替代方案刻意保持範圍,只處理換行符記這一件事。

三種可切換的明確模式

沒有任何單一模式能適用所有貼上情境。Email 中自動換行的段落希望句子間之間只有一個空格;含有零散分隔符的 CSV 資料列則希望把換行全部拿掉;Markdown 原始碼則希望保留空行所標示的段落邊界。這個工具把這些情境做成三種具名、可切換的模式。

模式對每個已識別符記的影響對連續符記的影響
取代為一個空格每個符記換成一個 U+0020兩個連續 LF 符記變成兩個空格;不會合併連續群組
完全移除每個符記換成空字串僅以換行分隔的單字會直接相連
保留段落單一符記的群組變成一個空格兩個以上符記的群組恰好變成兩個 LF 字元;換行之間的非換行字元會使它們留在不同群組

段落模式是三種中最嚴格的。只有直接相連的換行符記才會組成群組。一個 LF、一個空格、再一個 LF,在段落模式下會變成三個普通空格,因為工具拒絕猜測中間那個空格是可以丟掉的。若你真的需要在那裡標示段落邊界,就必須在原始文字中放兩個相連的換行符記。

如何用 Line Break Remover 處理硬換行的散文

本教學涵蓋最常見的情境:從 PDF、Email 回覆或固定寬度逐字稿複製而來的段落,每一個視覺上的行其實都以硬斷行而非軟換行作結。

  1. 將換行後的文字貼入輸入區。
  2. 若希望每個被換行的行變成一句連貫的句子,請選擇取代為一個空格。只有當原始文字中的空行群組確實代表段落分隔時,才選擇保留段落。
  3. 處理文字並閱讀統計面板。「偵測數」顯示找到的換行符記總數;「移除數」顯示實際被取代或刪除的數量。
  4. 在段落模式下,請將「剩餘數」與你預期的群組長度比對:兩個符記的群組應回報剩餘 2;三個符記的群組應回報移除 1、剩餘 2。
  5. 使用複製按鈕複製輸出;若瀏覽器拒絕剪貼簿權限,則手動選取結果。
  6. 複製完成後才能編輯輸入或切換模式,因為任一動作都會立即清除目前的結果、統計與剪貼簿狀態。

若兩個單字最後黏在一起、中間沒有空格,代表原始文字中的斷行周圍本來就沒有空白,而且你選的模式是完全移除。請改選取代為一個空格後重新處理,相連的情形就會還原。

五種換行符記,統一的計算規則

這五種符記在計算上並不能互換,即使其中兩個在文字區中看起來一模一樣。MDN JavaScript lexical grammar 中關於 line terminators 的參考資料列出相同的標準形式:LF、CR 與 CRLF,並加上 Unicode Line Breaking Algorithm 所擴充的 U+2028 與 U+2029。

  • CRLF——一個合併符記;在偵測以及(取代或移除模式下)移除時皆算一次。
  • 單獨的 CR——一個符記;常見於較舊的 Mac 檔案、匯出檔與匯入的記錄。
  • 單獨的 LF——一個符記;Unix-like 系統與大多數網頁文字的預設行結束字元。
  • U+2028 LINE SEPARATOR——一個符記;可能出現在從文件系統複製的 Unicode 文字中。
  • U+2029 PARAGRAPH SEPARATOR——一個符記;在段落模式下,它會被視為其群組內的一次斷行,而非強制段落分隔。

把 CRLF 視為一個符記之所以是實務上重要的事,是因為來自 Windows 工具的貼上文字多半是 CRLF,而來自網頁工具的貼上文字則是 LF。會在兩者間複製貼上的讀者,只有在工具將這個差異標準化時,才會看到偵測與移除數保持一致。兩個符記的段落邊界會回報移除 0、剩餘 2;三個符記的群組會回報移除 1、剩餘 2。這些數字讓你可以稽核這次轉換,而不是盲目相信輸出。

Line Break Remover 刻意不會動到的東西

同樣重要的是這個工具「不會做」的事,因為許多常見的工具會在無意中執行這些動作。

  • 不會修剪輸入的開頭或結尾。
  • 不會合併重複空格、展開 Tab,或更動不斷行空格。
  • 不會標準化 Unicode 文字、調整標點,或改變字母形式。
  • 不會解析 Markdown、HTML、CSV 引號規則、程式碼語法、郵寄地址或語意化的文件結構,因此無法知道某個斷行是否帶有業務上的意義。
  • 不會切割、抽樣或悄悄截斷過大的輸入;超過 1,000,000 個 UTF-16 字碼單位的輸入會在轉換前被拒絕並顯示明確訊息。
  • 不會把空白輸入當成一次成功的無作業;空白輸入同樣會回報錯誤。
  • 不會把輸入或輸出上傳到伺服器;所有作業都是本地的字串操作。

範圍刻意收窄,正是這個工具的重點。一個換行移除替代工具之所以當得起這個名字,是因為它能準確處理換行符記,卻把其他每一個字元都留在作者或原始來源當初放置的位置。