2011-08-05 280 views
10

我需要一種在字符串中的每個字符後面插入逗號的方法。因此,舉例來說,如果我有字母串在c中的每個字符後面插入一個逗號#

"ABCDEFGHIJKLMNOPQRSTUVWXYZ" 

我需要使它所以從A每一封信後一個逗號,到Z, 我想保持字符串,因爲它是不將其轉換爲char數組或類似的東西。我不知道這是否可能,但它只是id想要避免的東西。

我該怎麼做? 最終結果應該是這樣的:

"A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z," 

由於

+0

你可以避免數組或StringBuilder或類似的東西,因爲字符串是隻讀的。爲什麼避免他們是朋友! –

+0

可以不能 –

回答

21

在.net 4:

str = String.Join<char>(",", str) + ","; 

.NET 4.0添加String.Join過載,它接受一個IEnumerable<T>
此代碼將其與String一起鑄造爲IEnumerable<char>

我需要明確指定泛型類型參數,否則它將調用params string[]過載(使用單個string)。

14

那麼你必須做東西來生成新的字符串。最簡單的方法很可能是在.NET 4:

// string.Join won't put the trailing comma 
string result = string.Join(",", (IEnumerable<char>) input) + ","; 

string result = string.Join<char>(",", input) + ","; 

或者在.net 3.5,其中the overload we want不存在:

// string.Join won't put the trailing comma 
string result = string.Join(",", input.Select(c => c.ToString()) 
             .ToArray()) + ","; 

如果這些AREN」 t對你來說足夠高效,你可以隨時手動完成:

StringBuilder builder = new StringBuilder(input.Length * 2); 
foreach (char c in input) 
{ 
    builder.Append(c); 
    builder.Append(','); 
} 
string result = builder.ToString(); 
+1

+1,最後一個方法(手動的)在3727毫秒內10000000次,而'String.Join (「,」,str)'需要10543 ms –

+0

+1 stringbuilder! – aevanko

1

正則表達式替換可以工作。這個正則表達式可能很簡單,如([A-Z]),並用匹配加上。我將不得不查找如何去做。

請看這裏,http://msdn.microsoft.com/en-us/library/xwewhkd1.aspx

Dim input As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
    Dim pattern As String = "([A-Z])" 
    Dim replacement As String = "$1," 
    Dim rgx As New Regex(pattern) 
    Dim result As String = rgx.Replace(input, replacement) 
2
string InsertCommasBetweenChars(string s) 
{ 
    return string.Join(",", s.ToCharArray()); 
} 

string.Join超載只存在於.NET 4.0;如果您使用的是較早的版本,你可以這樣做,而不是:

string InsertCommasBetweenChars(string s) 
{ 
    return string.Join(",", Array.ConvertAll(s.ToCharArray(), c => c.ToString())); 
} 
0

你可以使用一個for循環,並通過炭炭移動,那麼你可以將當前字符追加到StringBuilder並添加逗號爲好。

循環完成後,您要麼返回StringBuilder.ToString(),要麼將其分配給原始字符串變量,如果不需要保留原來的字符串變量的話。

0

這應該工作

var input = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
var result= String.Join(",", input.ToCharArray(0,input.Length)); 
0

我知道你不想字符數組,但這個怎麼樣在短時間內修復:

Console.WriteLine(string.Join(",", "abc".ToCharArray())); 
0

這裏,抓住一些accumulator wisdom

var result = "ABCDEFG".Aggregate("", (c, n) => c+ ("," + n)).Substring(1); 

它比.Join更不可讀,但更加靈活。

+0

'String.Concat(str.Select(c => c +「,」))'要快得多。他_wants_尾隨逗號。 – SLaks

相關問題