跳至主要內容
Lizely

行數計數器

不必上傳文字,即可計算總行數、非空白行、空白行與最長行。

隱私權:你的檔案不會離開裝置,所有處理均在瀏覽器本機完成。

使用方式

  1. 1.在編輯器輸入或貼上文字;不需要上傳或按送出。
  2. 2.查看總行數、非空白行、空白/僅含空白字元的行,以及最長行的 Unicode 碼位數。
  3. 3.與編輯器或命令列工具比較時,請依頁面說明確認換行與 Unicode 規則。

關於行數計數器

行數計數器直接在瀏覽器中分析文字的行結構。可貼上原始碼、日誌、文章、清單、設定、字幕或任何純文字,統計會立即顯示總行數、非空白行、空白或僅含空白字元的行,以及最長行長度。不需要帳號、不會上傳文字,也不會呼叫遠端服務;按「清除」會刪除整段輸入並把所有統計歸零。

行數若不先說明邊界規則容易有歧義,因此本工具採明確定義:完全空白的輸入是 0 行;一旦有內容,至少有 1 行。LF、CRLF 與單獨 CR 各建立一個行邊界,CRLF 視為一個邊界而不是兩個;同一段文字可混用不同結尾,適合經過 Unix、Windows、舊版 Mac、終端機與剪貼簿的內容。結尾處的換行會產生最後一個空白行,例如 alpha 後沒有換行是 1 個非空白行,alpha 後加一個 LF 是 2 行;只有一個 CRLF 的檔案則是兩個空白行。

「非空白」表示移除周圍 Unicode 空白後仍有內容;只含空格、Tab 或 JavaScript trim 視為空白的字元會被計作空白行,但原始字元不會從輸入中刪除,仍計入最長行長度。總行數永遠等於非空白行加空白行,可作為交叉檢查。

最長行以 Unicode 碼位計數,而不是 JavaScript UTF-16 程式碼單位、使用者感知的 grapheme cluster、位元組或終端機欄寬。補充平面的 emoji 例如 😀 在 JavaScript 中佔兩個 UTF-16 單位,這裡只算一個碼位;分解形式的 e 加組合 acute accent 則算兩個碼位,即使畫面可能像一個字;以零寬連接符組成的家庭 emoji 同樣包含多個碼位。Tab 也算一個碼位,不會依編輯器顯示的多欄寬度展開。

輸入限制為 1,000,000 個 JavaScript UTF-16 程式碼單位,用來維持瀏覽器記憶體與回應速度。剛好在上限時會完整分析,超出一個單位時整段輸入被拒絕,舊統計消失,不會對前綴做部分計算或靜默截斷。這個限制與最長行的碼位指標刻意不同,因此一個 emoji 可消耗兩個輸入單位但在最長行只貢獻一個碼位。

共用純函式會先以 CRLF、CR、LF 的順序切割,避免 Windows 結尾被重複計算,再走訪每一行判斷空白與找出 Array.from 的最大碼位數。工具不提供編號預覽,避免大輸入產生數十萬 DOM 元素,也不計算字詞、句子、位元組、視覺欄寬、段落、換行顯示列或編輯器的 soft wrap;文字區內視覺換行並不會成為邏輯行,除非文字實際含有 LF、CRLF 或 CR。

方法與來源

空白輸入回傳 0 行;其他輸入以 CRLF | CR | LF 的正則表達式切割,順序確保 CRLF 是單一分隔符,並保留每個結尾換行後的空字串片段。JavaScript trim 後為空的片段計為空白,非空白行加空白行永遠等於總行數。最長行使用 Array.from(line).length,因此計算 Unicode 碼位,而不是 UTF-16 單位、grapheme、位元組或顯示欄寬;1,000,000 的輸入限制則獨立以 JavaScript string length 的 UTF-16 單位計算。範圍不含 soft wrap、編號預覽、正規化、Tab 展開、字詞、句子、位元組與視覺欄寬。

常見問題

結尾換行會產生另一行嗎?
會。每個 LF、CRLF 或單獨 CR 都建立一個邊界,結尾的邊界會產生最後一個空白行;只有完全空白輸入定義為 0 行。
空白行與非空白行如何區分?
移除 Unicode 空白後沒有內容的行是空白行;只含空格或 Tab 的行也是空白行。含有可見或非空白字元的行則為非空白行。
最長行的「碼位」是什麼意思?
補充平面的 emoji 雖然在 JavaScript 中佔兩個 UTF-16 單位,但算一個碼位;組合附加符號與零寬連接符分別計數,所以這不是 grapheme 數或終端機視覺寬度。
超過輸入上限會怎樣?
超過 1,000,000 個 UTF-16 程式碼單位的文字會整段拒絕;工具會隱藏舊統計並顯示錯誤,不會截斷或回傳部分結果。

文字工具 使用指南

查看全部