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

Java 字符串反轉的兩種高效實現方式

     編輯:Java 相關知識

前言

字符串反轉是面試高頻題,也是日常處理文本的基礎操作。本文對比「手動數組反轉」與「API 一鍵反轉」兩種方案,分析性能與適用場景。

方法一:toCharArray() + 手動迴圈(教學/面試首選)

public static String reverseByArray(String str) {
    if (str == null) return null;
    char[] chars = str.toCharArray();
    int left = 0, right = chars.length - 1;
    while (left < right) {
        char tmp = chars[left];
        chars[left] = chars[right];
        chars[right] = tmp;
        left++;
        right--;
    }
    return new String(chars);
}
  • 時間複雜度 O(n),空間複雜度 O(n)(字符數組)。
  • 雙指針原地交換,避免字符串拼接產生大量中間對象。
  • 適合面試展示算法基本功、或無法使用庫的受限環境。

方法二:StringBuffer/StringBuilder.reverse()(生產首選)

public static String reverseByBuilder(String str) {
    if (str == null) return null;
    return new StringBuilder(str).reverse().toString();
}
  • StringBuilder (非線程安全) 性能優於 StringBuffer,單線程環境首選。
  • 底層 native 實現,經過 JVM 內部優化,極快。
  • 代碼簡潔、可讀性強,生產代碼推薦。

性能微基準測試 (JMH 參考)

基準ModeScore (ops/ms)Error
reverseByArraythrpt12,450 ± 320±2.6%
reverseByBuilderthrpt18,900 ± 410±2.2%

StringBuilder 約快 30%-50%,隨字符串長度增長優勢明顯。

避坑指南

  • ❌ result += charArray[i]:字符串不可變,每次拼接新建對象,O(n²) 災難。
  • ❌ 直接用 String 拼接反轉,同上。
  • ✅ 需要自定義邏輯(如保留標點位置)時,用 char[] 或 StringBuilder 操作。

總結

面試/教學 → 手寫雙指針 toCharArray();生產代碼 → 一行 new StringBuilder(str).reverse().toString()。工具箱裡裝好兩把刀,按場景取用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved