答案 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。