string.Replace中的特殊字符

时间:2011-08-23 18:01:34

标签: c# string

我想替换字符串中的特殊字符。

例如,这是输入文本

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

4 个答案:

答案 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]);
}

可能会提供所需的完整替换字符串。