Специальные символы в строке. Заменить - PullRequest
2 голосов
/ 23 августа 2011

Я хочу заменить специальные символы в строке.

Например, это входной текст

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

1006 *, а затем я ожидал такого результата: http://video.l3.fbcdn.net/cfs-l3-ash4/351111... 1009 * Нострока не заменяет как ожидалось
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 ]

2 голосов
/ 23 августа 2011

Ваша проблема в том, что ваша строка вытесняется на каждой итерации цикла, возвращаясь к 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 голос
/ 23 августа 2011

Попробуйте это:

var tmp = textBox1.Text;
for (i = 0; i <= 2; i++)
{
    tmp = tmp.Replace(BadCharacters[i], GoodCharacters[i]);
}

textBox2.Text = tmp;
0 голосов
/ 23 августа 2011

textBox2.Text будет когда-либо содержать только одну подстановку для каждого цикла, поэтому вы, вероятно, увидите только последнюю итерацию.

for (i = 0; i <= 2; i++)
{
  textBox1.Text = textBox1.Text.Replace(BadCharacters[i], GoodCharacters[i]);
}

, скорее всего, предоставит требуемую полную замещенную строку.

0 голосов
/ 23 августа 2011

Вам необходимо сохранять обновленное значение строки каждый раз, когда вы заменяете подстроку. Поэтому сохраните начальное значение от 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...