2013-03-06 12 views
7

Dla przykładu, mam ciąg jak:Jak usunąć dokładny występ znaków z ciągu?

string str = "santhosh,phani,ravi,phani123,praveen,sathish,prakash"; 

I chcesz usunąć charaters ,phani z str.

Teraz używam str = str.Replace(",phani", string.Empty);

potem moje wyjście jest: str="santhosh,ravi123,praveen,sathish,prakash";

Ale chcę wyjście jak: str="santhosh,ravi,phani123,praveen,sathish,prakash";

+3

Wszystkie 3 poniższe odpowiedzi, w tym momencie są błędne, ponieważ nie będą działać, jeśli "phani" jest ostatnim elementem ciągu. Lepiej wykorzystaj Regex do dopasowania i zamiany. – bPratik

+1

Spróbuj użyć Regex.Replace() – Killo

+0

@bPratik Mimo że dobrze jest móc korzystać z Regex, nie sądzę, że jest to naprawdę konieczne. Jeśli miałby to być duży ciąg, lepiej byłoby użyć skompilowanego Regexa dla wydajności, ale myślę, że podział i dołączenie są bardziej czytelne tutaj. – Silvermind

Odpowiedz

14
string str = "santhosh,phani,ravi,phani123,praveen,sathish,prakash"; 
var words = str.Split(','); 
str = String.Join(",", words.Where(word => word != "phani")); 
+4

+1 dla najbardziej logicznej odpowiedzi tutaj! –

+0

i musimy po prostu dodać przestrzeń nazw za pomocą system.linq; – RealSteel

0

Jak o

str = str.Replace(",phani,", ","); 

To jednak nie nie działa, jeśli "phani" jest ostatnim elementem w łańcuchu. Aby obejść ten problem, można to zrobić:

string source = "..."; 
source += ","; // Explicitly add a comma to the end 

source = source.Replace(",phani,", ",").TrimEnd(','); 

Dodaje przecinek, zastępuje "phani" i usuwa końcowy przecinek.

Trzecim rozwiązaniem byłoby to:

str = String.Join(",", str.Split(',').ToList().Remove("phani").ToArray()); 
+0

Wiem - Właśnie zmieniłem swoją odpowiedź . –

0

spróbuj użyć zamiast z przecinkiem;

string str = "santhosh,ravi,phani,phani123,praveen,sathish,prakash"; 
str = str.Replace(",phani,", ","); 
Console.WriteLine(str); 

Wyjście będzie;

santhosh,ravi,phani123,praveen,sathish,prakash 

Oto DEMO.

Jako komentarz do Davina mentioned, to nie zadziała, jeśli phani jest ostatnim elementem w łańcuchu. Silvermind's answer wygląda jak odpowiednia odpowiedź.

+1

To nie zadziała, jeśli nazwisko jest ostatnie na liście. –

+0

@DavinTryon Hmm, myślę, że masz rację! Lepsza odpowiedź ... –

0
String.join(",", str.split(',').ToList().remove("phani")); 

Usuwa daną nazwę z listy.

2

lepszym wyborem jest użycie metody Split i Join. Łatwy w Linq:

String str = "santhosh,phani,ravi,phani123,praveen,sathish,prakash"; 
String token = "phani"; 
String result = String.Join(",", str.Split(',').Where(s => s != token)); 

(edit: mam trochę czasu na badania i nie jestem pierwsza ^^)

0
string str = "santhosh,phani,ravi,phani123,praveen,sathish,prakash"; 
string pattern = @"\b,phani,\b"; 
string replace = ","; 
Console.WriteLine(Regex.Replace(str, pattern, replace)); 

wyjściowa:

santhosh,ravi,phani123,praveen,sathish,prakash 
+0

Co się stanie, jeśli "phani" znajduje się na początku lub na końcu ciągu znaków (tj. Nie jest poprzedzone przecinkiem, a po nim przecinek)? –

+0

Również '\ b' nie ma większego sensu, ponieważ przecinek jest znakiem ograniczającym słowo. –

0

może używać the regular expression, ale musisz zająć się przypadkami, gdy twój ciąg zaczyna się lub kończy podciąganiem:

var pattern = @",?\bphani\b,?"; 
var regex = new Regex(pattern); 
var result = regex.Replace(input, ",").Trim(','); 

Krótszy zapis mógłby wyglądać następująco:

var result = Regex.Replace(input, @",?\bphani\b,?", ",").Trim(','); 

Wyjaśnienie wyrażenia regularnego:,?\bphani\b,? pasuje słowo phani, ale tylko wtedy, poprzedzony oraz zakończony znakami word-ogranicznika (ze względu na słowa boundary metacharacter \b), i może być (ale nie musi) być poprzedzone i poprzedzone przecinkiem dzięki ,?, co oznacza brak lub więcej przecinków.

Na końcu musimy usunąć możliwe przecinki od początku i końca łańcucha, dlatego na wyniku jest Trim(',').

Powiązane problemy