我想替换字符串中的特殊字符。
例如,这是输入文本
HTTP \ u00253A \ u00252F \ u00252Fvideo.l3.fbcdn.net \ u00252Fcfs-L3-ASH4 \ u00252F351111 \ u00252F203 \ u00252F260478023976707_55781.mp4 \ u00253Foh \ u00253D064626d4996116bdcde2d52f9b70e1f0 \ u002526oe \ u00253D4E566C00 \ u002526l3s \ u00253D20110823082632 \ u002526l3e \ u00253D20110825083632 \ u002526lh \ u00253D0dbcb2d22cd4dd5eb10bf
然后我期待这个结果:
http://video.l3.fbcdn.net/cfs-l3-ash4/351111...
但字符串未按预期替换
string[] BadCharacters = { "\\u00253A", "\\u00252F", "\\u00253F" };
string[] GoodCharacters = { ":", "/", "?" };
int i;
for (i = 0; i <= 2; i++)
{
textBox2.Text = textBox1.Text.Replace(BadCharacters[i], GoodCharacters[i]);
}
答案 0 :(得分:2)
你的问题是你的字符串在循环中通过回到TextBox1.Text的每次迭代都会被踩踏,你需要将它保存在本地并继续使用更改的值进行下一次替换:
var changedText = textBox1.Text;
// always modify and assign to temp, that way we modify previous
for (i = 0; i <= 2; i++)
{
changedText = changedText.Replace(BadCharacters[i], GoodCharacters[i]);
}
textBox2.Text = changedText;
答案 1 :(得分:1)
试试这个:
var tmp = textBox1.Text;
for (i = 0; i <= 2; i++)
{
tmp = tmp.Replace(BadCharacters[i], GoodCharacters[i]);
}
textBox2.Text = tmp;
答案 2 :(得分:0)
每次更换子字符串时都需要保存字符串的更新值。因此,将textBox1
的初始值保存到textBox2
并在迭代期间使用它。这样,您就不会丢失更新的字符串值。
textBox2.Text = textBox1.Text;
for(i = 0; i <= 2; i++)
{
textBox2.Text = textBox2.Text.Replace(BadCharacters[i], GoodCharacters[i]);
}
此外,通过将初始textBox1
值设置为textBox2
并在for循环中使用它,您可以保存一个assigmant语句。
答案 3 :(得分:0)
textBox2.Text只会包含每个循环的一个替换,因此您可能只会看到最后一次迭代。
for (i = 0; i <= 2; i++)
{
textBox1.Text = textBox1.Text.Replace(BadCharacters[i], GoodCharacters[i]);
}
可能会提供所需的完整替换字符串。