在C#中是否有办法分别用另一个集合替换一组字符?

时间:2013-02-10 10:00:48

标签: .net regex string replace

C#中是否有一种方法可以将字符集合分别替换为另一个集合,如下所示:

"ABCDEF.KindOfReplace( "AE", "12"); // the result: "1BCD2F"

3 个答案:

答案 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);
}