在C#中給定以下字符串,我將如何在字符串中的每個字符之間插入一個字符?在C#中插入字符到字符串中#
例如: "Hello Sunshine"
將成爲 "H.e.l.l.o. .S.u.n.s.h.i.n.e"
什麼是C#這樣做的最有效,最快的方法是什麼?
在C#中給定以下字符串,我將如何在字符串中的每個字符之間插入一個字符?在C#中插入字符到字符串中#
例如: "Hello Sunshine"
將成爲 "H.e.l.l.o. .S.u.n.s.h.i.n.e"
什麼是C#這樣做的最有效,最快的方法是什麼?
如何:
string result = string.Join(".", someString.AsEnumerable());
這隱藏了大部分的複雜性,並且將使用StringBuilder
內部。
如果你想每一個字符後點使用StringBuilder
:
StringBuilder sb = new StringBuilder(s.Length * 2);
foreach (char c in s) {
sb.Append(c);
sb.Append('.');
}
string result = sb.ToString();
如果你不希望尾隨點,然後在.NET 4.0中,你可以使用string.Join
。
string result = string.Join(".", (IEnumerable<char>)s);
在.NET 3.5和較舊的第二個參數應該是一個數組,這意味着你將不得不暫時創建一個數組,因此最有可能是更快地使用上面所示的StringBuilder
解決方案和治療的第一或最後一個索引作爲特例。
注意:通常您不需要最高效的解決方案,只需要一個足夠快的解決方案。如果一個稍微慢一點但簡單得多的解決方案就足夠滿足您的需求,那就用它來代替不必要的性能優化。
+1 - 可以通過做'StringBuilder的某人=新的StringBuilder提高效率(s.Length * 2);' –
好主意。更新。 –
對於與示例相同大小的問題,StringBuilder是不必要和繁瑣的。 –
你關心大字符串的性能嗎?
var result = string.Join(".", str.Select(c => c.ToString());
這將會丟失最後的'.'。 –
@Kirik,是的,沒有提到 – Snowbear
馬克的答案可能更具可讀性。但我一直喜歡這種類型的解決方案:
string.Join("", "Hello Sunshine".Select(x => x + "."))
然後'string.Concat'。我們扯平了 :) – Snowbear
這是我的建議,我知道這並不看起來超級性感,但我相信它的速度更快(3X的樣本串快),需要的內存的具體金額比使用選擇,加入了所有的人,和所有爵士樂:-)
static string ConvertString(string s)
{
char[] newS = new char[s.Length * 2 + 1];
int i = 0;
do
{
newS[i] = s[i/2];
if (i == (s.Length * 2 - 2))
break;
i++;
newS[i] = '.';
i++;
}
while (true);
return new string(newS);
}
再加上它不需要框架4.
我想你錯過了最後的'.'。 – svick
@svick:我這樣做 - 但是然後再次要求是模糊的 - 文字說「在每個字符之間」,但示例在最後字符後顯示點 – BrokenGlass