C#中是否有一种方法可以将字符集合分别替换为另一个集合,如下所示:
"ABCDEF.KindOfReplace( "AE", "12"); // the result: "1BCD2F"
答案 0 :(得分:3)
没有,但在我看来,你的代码相当于:
var myString = "ABCDEF";
var newString = myString.Replace("A", "1").Replace("E", "2");
你可能会编写一个扩展方法来使这个更好,但对于大型替换数组,它不会特别有效。
编辑:
正如下面的评论中指出的那样,在你需要替换大量字符串/字符的情况下,可以使用StringBuilder
。
答案 1 :(得分:1)
不,不是直接的。你必须使用字符串原语或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());
}
(上面是一个例子,记得为相同长度的字符串添加防护等)。
答案 2 :(得分:0)
没有开箱即用的功能。如果你手工制作东西,这可能是许多可能的解决方案之一。 它操纵一个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);
}