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

C# 字符串分割與倒序拼接:Split、LINQ、StringBuilder 三種實現

     編輯:程式設計綜合問答

將字符串 "a,b,c,d,e,f,g" 按逗號分割後倒序拼接為 "g,f,e,d,c,b,a"。C# 提供多種實現方式,從基礎數組操作到 LINQ 再到高性能 StringBuilder。

方案一:Split + 反向迴圈 + StringBuilder (高性能、標準)


string input = "a,b,c,d,e,f,g";
string[] parts = input.Split(','); // 分割

var sb = new StringBuilder();
for (int i = parts.Length - 1; i >= 0; i--) {
    sb.Append(parts[i]);
    if (i > 0) sb.Append(','); // 非首個元素前加分隔符
}
string result = sb.ToString(); // "g,f,e,d,c,b,a"

方案二:LINQ Reverse + String.Join (最簡潔、可讀性強)


using System.Linq;

string result = string.Join(",", input.Split(',').Reverse());
// 或
string result = string.Join(",", input.Split(',').AsEnumerable().Reverse());

方案三:Array.Reverse 就地反轉 (節省內存、修改原數組)


string[] parts = input.Split(',');
Array.Reverse(parts); // 就地反轉
string result = string.Join(",", parts);

方案四:Span/Memory 高性能無分配 (.NET Core 2.1+)


// 僅演示思路,實際需手寫解析避免 Split 分配數組
ReadOnlySpan span = input.AsSpan();
// 手寫解析器反向輸出...
// 適用於極高性能場景 (每秒百萬次)

效能對比 (百萬次迴圈基準)

方案分配速度可讀性推薦場景
Split + StringBuilder 循環1 個數組 + 1 StringBuilder⭐⭐⭐⭐⭐⭐⭐⭐⭐高性能、熱路徑、舊版 .NET
LINQ Reverse + String.Join1 數組 + 1 迭代器 + 1 結果字符串⭐⭐⭐⭐⭐⭐⭐⭐⭐業務代碼、現代 .NET、團隊標準
Array.Reverse + String.Join1 數組 (就地修改)⭐⭐⭐⭐⭐⭐⭐⭐⭐可修改原數組、追求極致速度

擴展:自定義分隔符、去除空項、Trim


// 分割選項:去除空項、Trim 空白
string[] parts = input.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);

// 異常輸入處理
string safeResult = string.IsNullOrEmpty(input) ? "" : string.Join(",", input.Split(',').Reverse());

最佳實踐建議

  1. 業務代碼首選 LINQ:string.Join(",", str.Split(',').Reverse()),一行解決、語義清晰、可維護。
  2. 2. 熱路徑/高頻調用用 StringBuilder:避免字符串拼接產生大量臨時對象觸發 GC。 3. 注意分割選項:RemoveEmptyEntries 處理 "a,,b",TrimEntries (.NET 5+) 處理 "a, b"。 4. 空/Null 防禦:擴展方法封裝 str.ReverseJoin(",") 內部處理 null。

// 擴展方法封裝
public static class StringExtensions {
    public static string ReverseJoin(this string input, string separator) {
        if (string.IsNullOrEmpty(input)) return "";
        return string.Join(separator, input.Split(new[] { separator }, StringSplitOptions.None).Reverse());
    }
}

// 使用
"a,b,c".ReverseJoin(","); // "c,b,a"

核心原則:正確性 > 可讀性 > 效能。除非 Profile 證明是瓶頸,否則寫最易讀的 LINQ 版本。

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