1

在 C# 中有没有办法将一个字符集合分别替换为另一个集合,如下所示:

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

3 回答 3

3

不,没有,但在我看来,您的代码相当于:

var myString = "ABCDEF";
var newString = myString.Replace("A", "1").Replace("E", "2");

您可能可以编写一个扩展方法来使它更好,但对于大型替换数组,它不会特别有效。

编辑:

正如下面评论中所指出的,您可以StringBuilder在需要替换大量字符串/字符的情况下使用 a 。

于 2013-02-10T10:14:35.983 回答
1

不,不是直接的。您必须使用字符串原语或正则表达式自己构建它。

一个简单的实现可能是:

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());
}

(上面是一个例子,记得为相同长度的字符串添加保护,等等)。

于 2013-02-10T10:11:23.673 回答
0

开箱即用没有这样的功能。如果您手工制作某些东西,这可能是许多可能的解决方案之一。它操作一个字符数组并使用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);
}   
于 2013-02-10T11:06:12.207 回答