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

Java 字符串指定區間反轉算法實現與解析

     編輯:Java 綜合教學

Java 字符串指定區間反轉:算法思路與代碼實現

本文介紹一種常見的字符串處理需求:僅反轉字符串中指定索引區間的字符。例如輸入 str="mmabcdfeffnn",反轉索引 2 到 9 區間(abcdfeff),得到 "mmffefdcbann"。

算法思路:三段式拆分與重組

  1. 頭部:substring(0, start) —— 保持不變
  2. 待反轉區間:substring(start, end + 1) —— 核心處理對象
  3. 尾部:substring(end + 1, length) —— 保持不變

關鍵技巧:利用 StringBuffer(或 JDK 1.5+ StringBuilder)的 reverse() 方法實現區間反轉,最後三段拼接。

完整代碼實現

/**
 * 字符串指定區間反轉工具類
 */
public class StringPartialReverse {

    /**
     * 反轉字符串指定區間 [start, end](含邊界)
     *
     * @param str   原字符串
     * @param start 起始索引(包含)
     * @param end   結束索引(包含)
     * @return 處理後的字符串
     */
    public static String reverseRange(String str, int start, int end) {
        // 邊界校驗
        if (str == null || start < 0 || end >= str.length() || start > end) {
            return str;
        }

        // 1. 截取頭部
        String head = str.substring(0, start);
        // 2. 截取尾部
        String tail = str.substring(end + 1);
        // 3. 截取待反轉區間
        String middle = str.substring(start, end + 1);

        // 4. 反轉中間段(使用 StringBuilder 線程不安全但性能更好)
        String reversedMiddle = new StringBuilder(middle).reverse().toString();

        // 5. 拼接返回
        return head + reversedMiddle + tail;
    }

    public static void main(String[] args) {
        String original = "mmabcdefnn";
        int start = 2, end = 7;
        String result = reverseRange(original, start, end);
        System.out.println("原字符串: " + original);
        System.out.println("反轉後:   " + result); // 輸出: mmfedcba nn
    }
}

關鍵點解析

技術點說明
StringBuilder vs StringBuffer單線程環境推薦 StringBuilder(非同步,性能更高);多線程共享才用 StringBuffer
substring 索引語義substring(begin, end) 包含 begin,不包含 end,故區間結束需 end + 1
邊界防護生產代碼必須校驗 null、索引越界、start > end 等異常情況
不可變性String 不可變,所有操作產生新對象,原字符串不變

擴展場景

  • 多區間反轉:按索引排序後依次處理,或構建字符數組一次性原地修改
  • 大文件流式處理:配合 CharBuffer 分塊反轉,避免 OOM
  • Unicode 字符簇:涉及補充字符(Emoji 等)時需按代碼點處理,防止字符拆分

掌握「三段式拆分 + StringBuilder.reverse() + 拼接」模式,可高效解決各類字符串區間變換問題,代碼簡潔且性能優異。

  1. 上一篇文章:
  2. 下一篇文章:
JS 載入時機陷阱:為什麼  script  放在 <head> 會找不到 DOM 元素? JS 載入時機陷阱:為什麼