2010-05-29 68 views
1

這是正確的方法來反轉字符串嗎?我打算用它來反轉一個字符串,如:產品» X1 » X3到X3 « X1 «產品 我希望它是一個可用於其他位置的全局函數。在c中反轉字符串的最佳方法#

public static string ReverseString(string input, string separator, string outSeparator) 
{ 
    string result = String.Empty; 
    string[] temp = Regex.Split(input, separator, RegexOptions.IgnoreCase); 
    Array.Reverse(temp); 
    for (int i = 0; i < temp.Length; i++) 
    { 
     result += temp[i] + " " + outSeparator + " "; 
    } 
    return result; 
} 
+0

你想簡單地扭轉一個字符串或MO扭轉它不同的字符,如'»' - >'«'? – 2010-05-29 12:07:39

+0

我這樣調用這個函數:ReverseString(「test»test2」,「»」,「«」)它用outSeparator替換了分隔符。我想它靈活,這就是爲什麼我使用兩個參數.. :) – 2010-05-29 12:10:13

+1

看起來不錯。而不是循環遍歷字符串數組(temp)爲什麼不調用temp.Join(「」+ outSeperator +「」) – 2010-05-29 12:16:21

回答

7

如何:

String.Join(" « ", "Products » X1 » X3".Split(new[]{" » "}, 
    StringSplitOptions.None).Reverse().ToArray()); 

編輯:更新後的版本版本將工作,如果組件包含空格(如「富產品»X1»X3" )

+0

哇,很短和單行,喜歡它......但是我有錯誤:「沒有超載的方法」Reverse「需要0參數「 – 2010-05-29 12:22:09

+2

@Hasan,你需要添加'使用System.Linq;'來獲得['Enumerable.Reverse'](http://msdn.microsoft.com/en-us/library/bb358497.aspx)。 – 2010-05-29 12:32:50

1

您應該使用StringBuilder,而不僅僅是字符串的聚集,尤其是如果這將是使用了很多。

您還可以使用String.Join()將分隔字符串數組放回在一起。

+0

http://www.codinghorror.com/blog/2009/01/the-sad-tragedy-of-micro-optimization-theater.html – Rubys 2010-05-29 14:33:34

2

是的,這似乎是好的。

關於StringBuilder的:
無需使用StringBuilder除非有拆分後通常超過4-5元。如果有通常小於那麼聚合是好的。

+0

取決於此功能的次數被稱爲...如果它在一個循環內被卡住,那麼可能遠遠超過那個.. – cjk 2010-05-30 07:44:45

0

我用下面的:

/// <summary> 
    /// From BReusable 
    /// </summary> 
    /// <typeparam name="T"></typeparam> 
    /// <param name="items"></param> 
    /// <param name="toStringFunc"></param> 
    /// <param name="seperator"></param> 
    /// <returns></returns> 
    public static string ToJoinedString<T>(this IList<T> items, Func<int, T, string> toStringFunc, string seperator) 
    { 

     var sb = new StringBuilder(); 

     for (int i = 0; i < items.Count(); i++) 
     { 
      sb.Append((i != 0 ? seperator : String.Empty) + toStringFunc(i,items[i])); 

     } 
     return sb.ToString(); 
    } 

    public static string ToStringFromCharArray(this IEnumerable<char> items) 
    { 
     return items.ToJoinedString(x => x.ToString(), string.Empty); 
    } 

stringValue.Reverse().ToStringFromCharArray();