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