web-dev-qa-db-de.com

Möchten Sie die doppelten Anführungszeichen aus den Zeichenfolgen entfernen

Ich habe hier einige Fragen zum Entfernen von Anführungszeichen gesehen. Aber es hat mein Problem nicht gelöst. Sie erklärten, die Replace- oder Trim-Funktionen zu verwenden. Ich habe es benutzt, aber das Problem bleibt.

Mein Code:

DataTable dt = TypeConveriontHelper.ConvretExcelToDataTable(SourceAppFilePath);
        string targetPath = BatchFolderPath + @"\" + "TRANSACT.INX";
        StreamWriter wrtr = null;
        wrtr = new StreamWriter(targetPath);
        for (int x = 0; x < dt.Rows.Count; x++)
        {
            string rowString = "";
            for (int y = 0; y < dt.Columns.Count; y++)
            {
                if (y == dt.Columns.Count - 1)
                {
                    rowString += "\"" + dt.Rows[x][y].ToString() + "\"";
                }
                else
                {
                    rowString += "\"" + dt.Rows[x][y].ToString() + "\"~";
                }
            }           
            rowString.Replace('"', ' ').Trim();
            wrtr.WriteLine(rowString);
        }
        wrtr.Close();
        wrtr.Dispose();

Ich habe es mit rowString.Replace('"', ' ').Trim(); im obigen Code versucht. Es sind jedoch doppelte Anführungszeichen vorhanden. Gib mir eine Lösung. Vielen Dank.

11
user1537319

Sie müssen es wieder zu rowString zuordnen:

rowString = rowString.Replace('"', ' ').Trim();

Strings sind unveränderlich . 

row.String.Replace(...) gibt Ihnen eine Zeichenkette zurück, da Sie nichts zuweisen, es wird verworfen. Das ursprüngliche rowString-Objekt wird nicht geändert. 

Sie können String.Empty oder "" verwenden, um doppelte Anführungszeichen durch eine leere Zeichenfolge anstelle von Leerzeichen ' ' zu ersetzen. Ihre Aussage sollte also lauten:

rowString = rowString.Replace("\"", string.Empty).Trim();

(Denken Sie daran, Anführungszeichen als String"\"" zu übergeben, da die Methode mit string überladen wird. Für Leerzeichen müssen beide Parameter vom Typ string sein. 

Sie können Trim() am Ende loswerden, wenn Sie versuchen, Leerzeichen zu entfernen, die während string.Replace am Anfang oder Ende der Zeichenfolge hinzugefügt wurden. 

28
Habib

Beim Trimmen können Sie beliebige Zeichen entfernen, nicht nur Leerzeichen.

myString = myString.Trim('"');

http://msdn.Microsoft.com/de-de/library/d4tt83f9%28v=vs.110%29.aspx

16
pants

Ihr Problem ist ein häufiger Fehler. Folgendes müssen Sie tun:

rowString = rowString.Replace('"', ' ').Trim();

Stellen Sie sicher, dass Sie Ihr Ergebnis an eine Variable (rowString =) zurückgeben. Wenn Sie dies nicht tun, führt C # die Methoden weiterhin aus, ändert jedoch die Variable nicht. Dies ist der Fall bei beliebigen unveränderlichen Objekten.

Beispiel:

rowString.Replace('"', ' ').Trim();

wird nicht das tatsächliche rowString-Objekt ändern.

rowString = rowString.Replace('"', ' ').Trim();

ersetzt den alten Wert von rowString durch das Ergebnis des Codes rechts.

Ich schrieb diese Antwort und stellte gerade fest, dass Habib dasselbe oben erklärt hatte. :)

0
Chris H

Diese Zeile enthält einen Fehler. 

rowString.Replace('"', ' ').Trim(); 

Da sowohl replace als auch trim einen String zurückgibt, müssen Sie diesen einer Variablen zuweisen. Wenn Sie den String nicht zuweisen, verlieren Sie den durch die replace und trim-Methoden generierten Wert.

var myString = rowString.Replace('"', ' ').Trim(); 
//Or
rowString = rowString.Replace('"', ' ').Trim(); 
0
Jonas W

In VB musst du folgendes versuchen: 

Replace("""", "");

Aber in C # musst du folgendes versuchen: 

Replace("\"", "");

rowString.Replace('"', ' ') erstellt ein neues String-Objekt und ändert das vorhandene String-Objekt nicht. Daher müssen Sie das neu erstellte String-Objekt einer anderen Variablen zuweisen oder Ihre vorhandene Variable überschreiben.

rowString=rowString.Replace('"', ' ').Trim()    
or
var somestring=rowString.Replace('"', ' ').Trim()
0
Prabhu Murthy

Wie Habib erwähnt hat, sind Strings unveränderlich. Jede String-Manipulation muss mit den manipulierten Daten wie Replace, Reverse usw. zurückgesetzt werden.

Versuchen Sie also, die ersetzte Zeichenfolge zuzuweisen, um das gewünschte Verhalten zu erzielen.

0
Dhanasekar