2009-12-10 3 views
7

Если у меня есть две строки .. сказатьC#: Как удалить совпадающую подстроку между двумя строками?

string1 = "Hello Dear c'Lint"

и

строка2 = "Уважаемый"

.. Я хочу Сравнить строки первый и удалить совпадающую подстроку ..
результат вышеуказанных строк пар:

"Здравствуйте     c'Lint"

(т.е. два пространства между «Привет " и" c'Lint ")

Для простоты предположим, что string2 будет подмножеством string1 .. (i означает, что string1 будет содержат string2) ..

ответ

9

Делайте это только:

string string1 = textBox1.Text; 
string string2 = textBox2.Text; 

string string1_part1=string1.Substring(0, string1.IndexOf(string2)); 
string string1_part2=string1.Substring(
    string1.IndexOf(string2)+string2.Length, string1.Length - (string1.IndexOf(string2)+string2.Length)); 

string1 = string1_part1 + string1_part2; 

Надеюсь, что это поможет. Он удалит только первое появление.

+0

(thumbs up) thanx .. weldone :) –

11

насчет

string result = string1.Replace(string2,""); 

EDIT: Я видел слишком поздно ваш обновленный вопрос :)
Альтернативное решение для замены только первое вхождение, используя Regex.Replace, только для любопытство:

string s1 = "Hello dear Alice and dear Bob."; 
string s2 = "dear"; 
bool first = true; 
string s3 = Regex.Replace(s1, s2, (m) => { 
    if (first) { 
     first = false; 
     return ""; 
    } 
    return s2; 
}); 
+4

, который был бы string1 = string1.Заменить (string2 ""); : o) – hhravn

+1

Ya it works .. спасибо :) –

5
string1.Replace(string2, ""); 

Обратите внимание, что это приведет к удалению все вхождения string2 в пределах string1.

+0

ohk .. отлично .. Тогда как этого избежать. Я имею в виду, допустим, если я хочу удалить только первое вхождение string2, то? –

6

вы, вероятно, скорее хочется попробовать

string1 = string1.Replace(string2 + " ",""); 

В противном случае вы будете в конечном итоге с 2-х мест в середине.

+0

Нет, я хочу это пространство :) –

+0

Итак, вам нужно двойное пространство посередине? –

+0

Но ваш ответ тоже ценен .. так + –

2

Off верхней части моей головы, удаляя первый экземпляр может быть сделано как этот

var sourceString = "1234412232323"; 
var removeThis = "23"; 

var a = sourceString.IndexOf(removeThis); 
var b = string.Concat(sourceString.Substring(0, a), sourceString.Substring(a + removeThis.Length)); 

Пожалуйста, проверьте, прежде чем отпустить: о)

+0

ой! ваш код более понятен .. thanx :) –

0

Попробуйте это только один код строки ...

string str1 = tbline.Text; 
string str2 = tbsubstr.Text; 
if (tbline.Text == "" || tbsubstr.Text == "") 
{ 
    MessageBox.Show("Please enter a line and also enter sunstring text in textboo"); 
} 
else 
{ 
    **string delresult = str1.Replace(str2, "");** 
    tbresult.Text = delresult; 
}** 
Смежные вопросы