有沒有在C#的方式分別與另一個集合來代替字符的集合,如下所示:C#中有一種方法可以分別替換另一個集合中的字符集合嗎?
"ABCDEF.KindOfReplace("AE", "12"); // the result: "1BCD2F"
有沒有在C#的方式分別與另一個集合來代替字符的集合,如下所示:C#中有一種方法可以分別替換另一個集合中的字符集合嗎?
"ABCDEF.KindOfReplace("AE", "12"); // the result: "1BCD2F"
不,不是直接。你將不得不使用字符串原語或Regex來自己構建它。
一個簡單的實現可能是:
public static string KindOfReplace(this string original, string charsToReplace, string replacements)
{
var replacementDic = charsToReplace.Select((ch,i) => new { ch, i }).ToDictionary(x => x.ch, x => replacements[x.i]);
var result = original.Select(ch => replacementDic.ContainsKey(ch) ? replacementDic[ch] :ch);
return new String(result.ToArray());
}
(上面是一個例子,記得要加看守相同長度的字符串,等等)。
沒有沒有,但在我看來,你的代碼就相當於:
var myString = "ABCDEF";
var newString = myString.Replace("A", "1").Replace("E", "2");
你也許可以寫一個擴展方法,使這個更好,但對於大更換陣列它不會是特別高效。
編輯:
正如在評論中指出下面你可以使用在你有大量的字符串/字符來代替案件StringBuilder
。
最簡單的方法,並使用'StringBuilder'如果集合很大,而不是'String'。 – 2013-02-10 10:16:59
@paulius_l好點 - 我會編輯我的答案,包括這一點。 – 2013-02-10 10:24:04
開箱即用沒有這樣的功能。如果你手工做了這件事,這可能是許多可能的解決方案之一。 它操縱一個char數組,並使用IndexOfAny來查找要替換的字符。
public static string KindOfReplace(this string src, string find, string repl)
{
char[] target = src.ToCharArray();
char[] findChars = find.ToCharArray();
int finder = src.IndexOfAny(findChars);
while(finder>-1)
{
int charFind = find.IndexOf(src[finder]);
target[finder] = repl[charFind];
finder = src.IndexOfAny(findChars, finder+1);
}
return new String(target);
}
這不會是我的第一選擇在這裏使用Linq,但我喜歡聰明的做法 – rene 2013-02-10 11:15:08
因爲字符串就是char類型的枚舉,它似乎:-) – driis 2013-02-10 11:20:16