2013-03-06 17 views
7

Per esempio, ho una stringa del tipo:Come rimuovere l'esatto numero di caratteri da una stringa?

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

voglio cancellare i charaters ,phani da str.

Ora, io sto usando str = str.Replace(",phani", string.Empty);

poi la mia uscita è: str="santhosh,ravi123,praveen,sathish,prakash";

Ma io voglio un output come: str="santhosh,ravi,phani123,praveen,sathish,prakash";

+3

Tutte e 3 le risposte di seguito, in questo momento sono errate, in quanto non funzioneranno se 'phani' è l'ultimo elemento nella stringa. Stai meglio usando Regex per abbinarlo e sostituirlo. – bPratik

+1

Prova ad usare Regex.Replace() – Killo

+0

@bPratik Anche se è bello poter usare Regex, non penso che sia davvero necessario qui. Se dovesse trattarsi di una stringa di grandi dimensioni, sarebbe meglio usare un Regex compilato per le prestazioni, ma penso che una divisione e un join siano più leggibili qui. – Silvermind

risposta

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

+1 per la risposta più logica qui! –

+0

e dobbiamo semplicemente aggiungere lo spazio dei nomi usando system.linq; – RealSteel

0

Come su

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

Questo, tuttavia, non non funziona se "phani" è l'ultimo elemento nella stringa. Per aggirare il problema, si potrebbe fare questo:

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

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

Questo aggiunge una virgola, sostituisce "phani" e rimuove la virgola finale.

Una terza soluzione potrebbe essere questa:

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

Lo so - Ho appena cambiato la mia risposta . –

0

Provare a usare con virgola invece di;

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

Uscita sarà;

santhosh,ravi,phani123,praveen,sathish,prakash 

Ecco un DEMO.

Come Davin mentioned nel commento, questo non funzionerà se phani è l'ultimo elemento nella stringa. Silvermind's answer sembra la risposta giusta.

+1

Questo non funzionerà se il nome è l'ultimo nella lista. –

+0

@DavinTryon Hmm, penso che tu abbia ragione! Pensare una risposta migliore .. –

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

Rimuove ogni dato nome dall'elenco.

2

la scelta migliore è utilizzare un metodo Split e Join. Facile nel Linq:

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

(edit: mi prendo il tempo per le prove e io non sono prima ^^)

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

uscita:

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

Cosa succede se "phani" è all'inizio o alla fine della stringa (cioè non preceduta o seguita dalla virgola)? –

+0

Anche '\ b' non ha molto senso lì, perché la virgola stessa è un carattere di limite di parola. –

0

È possibile utilizzare the regular expression, ma è necessario occuparsi dei casi in cui la stringa inizia o termina con la sottostringa:

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

Shorter potrebbe essere la seguente:

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

Spiegazione della espressione regolare:,?\bphani\b,? corrisponde la parola phani, ma solo se preceduta e seguita da caratteri word-delimitatori (a causa della parola boundary metacharacter \b), e può essere (ma non deve essere) preceduto e seguito dalla virgola grazie a ,? che significa nessuna o più virgole.

Alla fine è necessario rimuovere le virgole possibili dall'inizio e dalla fine della stringa, ecco perché sul risultato c'è Trim(',').

Problemi correlati