2009-06-01 5 views
5

Il seguente pezzo di codice C# non sembra di fare nulla:String.Replace non sembra per sostituire le staffe con la stringa vuota

String str = "{3}"; 
str.Replace("{", String.Empty); 
str.Replace("}", String.Empty); 

Console.WriteLine(str); 

questo finisce per sputare: {3}. Non ho idea del perché questo sia. Faccio sempre questo genere di cose in Java. C'è qualche sfumatura nella gestione delle stringhe .NET che mi sfugge?

Brian

+0

Possibile duplicato di http: // StackOverflow.com/domande/1948978/string-replace-non-lavoro. Questo è arrivato per primo, ma l'altro ha un titolo più chiaro. – goodeye

risposta

18

La classe String è immutable; str.Replace non modificherà str, restituirà una nuova stringa con il risultato. Provate questo invece:

String str = "{3}"; 
str = str.Replace("{", String.Empty); 
str = str.Replace("}", String.Empty); 

Console.WriteLine(str); 
5

immagino che dovrete fare

String str = "{3}"; 
str = str.Replace("{", String.Empty); 
str = str.Replace("}", String.Empty); 

Console.WriteLine(str); 

sguardo al String.Replace di riferimento:

Valore restituito Tipo: System.String

Una stringa equivalente a questa istanza ma con tutte le istanze di oldValue sostituito con newValue.

5

La funzione Replace restituisce la stringa modificata, quindi è necessario assegnarla alla variabile str.

String str = "{3}"; 
str = str.Replace("{", String.Empty); 
str = str.Replace("}", String.Empty); 

Console.WriteLine(str); 
6

Str.Replace restituisce una nuova stringa. Quindi, è necessario utilizzarlo come segue:

String str = "{3}"; 
str = str.Replace("{", String.Empty); 
str = str.Replace("}", String.Empty); 
7

Sostituisci in realtà non modifica l'istanza di stringa su cui viene chiamata. Invece restituisce una copia modificata.

Prova questo:

String str = "{3}"; 
str = str.Replace("{", String.Empty); 
str = str.Replace("}", String.Empty); 

Console.WriteLine(str); 
8

String è immutabile; non è possibile modificare un'istanza di una stringa. Le tue due chiamate Replace() non fanno nulla alla stringa originale; restituiscono una stringa modificata. Lo vuoi invece:

String str = "{3}"; 
str = str.Replace("{", String.Empty); 
str = str.Replace("}", String.Empty); 

Console.WriteLine(str); 

Funziona così anche in Java.

4

Credo che str.Replace restituisca un valore che è necessario assegnare alla variabile. Quindi sarà necessario fare qualcosa di simile:

String str = "{3}"; 
str = str.Replace("{", String.Empty); 
str = str.Replace("}", String.Empty); 

Console.WriteLine(str); 
3

Il metodo Replaceritorna una stringa con la sostituzione. Quello che penso che stai cercando è questo:

str = str.Replace("{", string.Empty); 
str = str.Replace("}", string.Empty); 

Console.WriteLine(str); 
3

oltre tutti i suggerimenti finora - si potrebbe anche fare questo senza modificare il valore della stringa originale utilizzando le funzioni di sostituire in linea nell'output ..

String str = "{3}"; 

Console.WriteLine(str.Replace("{", String.Empty).Replace("}", String.Empty)); 
Problemi correlati