在C#中将多个字符替换为字符串中的多个值

时间:2014-06-06 14:31:12

标签: c# string replace char

这里的问题是,应用程序只采用最后一个替换方法(Z到G)

有没有办法让它全部获得? (例如,(n到o))

(这是图片)

http://i.stack.imgur.com/SyK4M.png

3 个答案:

答案 0 :(得分:3)

您反复修改相同的来源,而不是修改前一次调用的结果。

尝试

string replaced =  txt1.Text.Replace(...);
replaced = replaced.Replace(...);
replaced = replaced.Replace(...);
...

txt2.Text = replaced;

或者更好的是,使用StringBuilder重复变异字符串,而不会乱丢中间字符串堆。

StringBuilder sb = new StringBuilder(txt1.Text);

sb.Replace(...);
sb.Replace(...);
sb.Replace(...);

txt2.Text = sb.ToString();

答案 1 :(得分:3)

  

应用程序仅采用最后一个Replace方法(Z到G)

这是因为string是不可变的。更重要的是,你的算法被打破了,因为后来的替换"见"以前的结果。您不能按顺序执行替换 - 如果要获得正确的结果,则必须立即考虑它们。否则,l将变为o,即使您的算法将l替换为n

// Let's say the text is "Hello"
text = text.replace('l', 'n'); // The text becomes "Henno"
... // More substitutions
text = text.replace('n', 'o'); // The text becomes "Heooo"

以下是解决问题的方法:

StringBuilder res = new StringBuilder();
foreach (char c in txt1.Text) {
    char toAppend;
    switch (c) {
        case 'I': toAppend = 'L'; break;
        case 'j': toAppend = 'n'; break;
        case 'J': toAppend = 'N'; break;
        case 'k': toAppend = 'l'; break;
        ...
        default: toAppend = '?';
    }
    res.append(toAppend);
}

答案 2 :(得分:0)

您继续将替换值应用于原始值。 Replace返回一个新的String,而不是修改你传入的String。