2013-07-30 26 views
14

Quello che mi chiedo è se sia possibile sostituire più caratteri in una stringa (diciamo, i caratteri &, | e $ per esempio) senza dover usa .Replace() più volte? Attualmente sto usando comeSostituzione di più caratteri in una stringa in C# con un solo rivestimento

return inputData.Replace('$', ' ').Replace('|', ' ').Replace('&', ' '); 

ma che è semplicemente orribile e mi chiedo se un altrettanto piccolo, ma efficace alternativa è là fuori.

EDIT: Grazie a tutti per le risposte, purtroppo non ho la 15 reputazione necessaria per upvote persone

+0

check out ht tp: //stackoverflow.com/questions/12007358/alternative-to-string-replace-multiple-times, per farla breve, a meno che tu non voglia rendere il codice meno leggibile, no, non proprio. – Dutts

risposta

35

È possibile utilizzare Regex.Replace:

string output = Regex.Replace(input, "[$|&]", " "); 
+0

E nemmeno l'escape non è richiesto, +1 –

6

È possibile utilizzare la funzione Split e String.Join prossimo:

String.Join(" ", abc.Split('&', '|', '$')) 

codice di prova:

static void Main(string[] args) 
{ 
    String abc = "asdfj$asdfj$sdfjn&sfnjdf|jnsdf|"; 
    Console.WriteLine(String.Join(" ", abc.Split('&', '|', '$'))); 
} 
+0

dovrebbe essere '... Join (" ", ...' sicuramente? –

+0

Yeap, errore mio, thx – FSou1

0

che dire:

return Regex.Replace(inputData, "[\$\|\&]", " "); 
+1

Questo codice non viene compilato. Devi fare doppio escape del tuo Regex o devi prefisso la tua stringa con '@'. – fero

1

E 'possibile fare con Regex, ma se si preferisce, per qualche ragione per evitarlo, utilizzare la seguente estensione statica:

public static string ReplaceMultiple(this string target, string samples, char replaceWith) { 
    if (string.IsNullOrEmpty(target) || string.IsNullOrEmpty(samples)) 
     return target; 
    var tar = target.ToCharArray(); 
    for (var i = 0; i < tar.Length; i++) { 
     for (var j = 0; j < samples.Length; j++) { 
      if (tar[i] == samples[j]) { 
       tar[i] = replaceWith; 
       break; 
      } 
     } 
    } 
    return new string(tar); 
} 

Usage :

var target = "abc123abc123"; 
var replaced = target.ReplaceMultiple("ab2", 'x'); 
//replaced will result: "xxc1x3xxc1x3" 
Problemi correlati