首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 字串處理實用技巧:遞歸統計連續空格、合併多餘空格與去除首尾空白

     編輯:Java 相關知識

問題場景

使用者輸入或外部資料常包含多連續空格、首尾空白,需正規化為「單一空格分隔、無首尾空白」的標準格式。本文提供純 Java 實作(不依賴正則),展示遞歸與字串操作邏輯。

三步驟解法

步驟一:遞歸統計連續空格數


/**
 * 從 index 位置開始,遞歸計算連續空格個數
 */
public static int getBlankNumber(String s, int index) {
    if (index < s.length()) {
        if (s.charAt(index) == ' ') {
            return getBlankNumber(s, index + 1) + 1;
        }
    }
    return 0;
}

步驟二:合併多餘空格(保留單一空格)


public static String mergeBlank(String s) {
    for (int i = 0; i < s.length(); i++) {
        int blankCount = getBlankNumber(s, i);
        if (blankCount >= 2) {
            // 保留一個空格:前段 [0, i) + 後段 [i+blankCount-1, end)
            String part1 = s.substring(0, i);
            String part2 = s.substring(i + blankCount - 1);
            s = part1 + part2;
            // 因為字串變短,索引需調整(這裡簡單處理,實務建議用 StringBuilder)
        }
    }
    return s;
}

步驟三:去除首尾空白


public static String trim(String s) {
    if (s.isEmpty()) return s;
    if (s.charAt(0) == ' ') s = s.substring(1);
    if (!s.isEmpty() && s.charAt(s.length() - 1) == ' ') s = s.substring(0, s.length() - 1);
    return s;
}

測試驗證


public static void main(String[] args) {
    String input = " aaa a aa ";
    String step1 = mergeBlank(input); // " aaa a aa "
    System.out.println("[" + step1 + "]");
    String step2 = trim(step1);       // "aaa a aa"
    System.out.println("[" + step2 + "]");
}

效能與改進建議

  • 遞歸深度風險:極長連續空格會導致 StackOverflowError,建議改用迴圈計數。
  • 字串不可變:每次 substring + 連接 產生新物件,大量資料請使用 StringBuilder 或 char[] 原地修改。
  • 生產環境首選:s.trim() 去首尾、s.replaceAll("\\s+", " ") 合併內部空白,JDK 內建高度優化。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved