2013-02-10 53 views

回答

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

(上面是一个例子,记得要加看守相同长度的字符串,等等)。

+0

这不会是我的第一选择在这里使用Linq,但我喜欢聪明的做法 – rene 2013-02-10 11:15:08

+0

因为字符串就是char类型的枚举,它似乎:-) – driis 2013-02-10 11:20:16

3

没有没有,但在我看来,你的代码就相当于:

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

你也许可以写一个扩展方法,使这个更好,但对于大更换阵列它不会是特别高效。

编辑:

正如在评论中指出下面你可以使用在你有大量的字符串/字符来代替案件StringBuilder

+0

最简单的方法,并使用'StringBuilder'如果集合很大,而不是'String'。 – 2013-02-10 10:16:59

+0

@paulius_l好点 - 我会编辑我的答案,包括这一点。 – 2013-02-10 10:24:04

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); 
} 
相关问题