Ich versuche, \" in einer Zeichenfolge durch " zu ersetzen. Wie kann ich das tun? Ich habe versucht, Ersetzen zu verwenden, aber ich konnte keinen Weg finden, dies zu tun.

Ex:

string line = "This is a \"sample\" "
string replaced = "This is a "sample" ".

Vielen Dank.

c#
0
Jake Manet 18 Jän. 2019 im 16:38

5 Antworten

Beste Antwort

Da Anführungszeichen zum Starten und Beenden von Zeichenfolgen verwendet werden (sie sind eine Art Steuerzeichen), können Sie kein Anführungszeichen in der Mitte einer Zeichenfolge haben, da dies die Zeichenfolge beenden würde

string replaced = "This is a "sample" ";
/*
You can see from the syntax highlighting (red) that the string is being
detected as <This is a > and <sample> is black meaning it is detected as 
code (and will cause a syntax error)
*/

Um ein Anführungszeichen in die Mitte der Zeichenfolge zu setzen, maskieren wir es (Escape bedeutet, es als Zeichenliteral anstelle eines Steuerzeichens zu behandeln), indem wir das Escape-Zeichen verwenden, das in C # ein Backslash ist.

string line = "This is a \"sample\"";
Console.WriteLine(line);
// Output: This is a "sample"

string literalLine = @"This is a ""sample""";
Console.WriteLine(literalLine);
// Output: This is a "sample"

Das @ -Symbol in C # bedeutet, dass dies eine Literalzeichenfolge sein soll (Steuerzeichen ignorieren). Anführungszeichen beginnen und enden jedoch weiterhin Zeichenfolgen. Um ein Anführungszeichen in einer Literalzeichenfolge zu drucken, schreiben Sie zwei davon "" (so lautet die Sprache) ist entworfen)

3
Michael 18 Jän. 2019 im 14:07

Fall 1: Wenn der Wert innerhalb der Variablen line tatsächlich This is a \"sample\" ist, können Sie line.Replace("\\\"", "\"") ausführen.

Wenn nicht: \" ist eine Escape-Sequenz. Es wird im Code als \" angezeigt. Beim Kompilieren wird es jedoch als " anstelle des ursprünglichen \" angezeigt.

Der Grund für das Entkommen von Anführungszeichen liegt darin, dass der Compiler nicht erkennen kann, ob sich das Anführungszeichen in einem anderen Anführungszeichen befindet oder nicht. Sehen wir uns Ihr Beispiel an:

"This is a "sample" "

Ist dies This is a eine Gruppe, dann ein unbekanntes Token sample, dann ein weiteres Zitat ? or This is a "sample", alles innerhalb eines Zitats? Wir können eine Vermutung anstellen, indem wir uns den Kontext ansehen, der Compiler jedoch nicht. Daher verwenden wir die Escape-Sequenz, um dem Compiler mitzuteilen: "Ich habe dieses doppelte Anführungszeichen als Zeichen verwendet, nicht das Schließen / Öffnen eines Zeichenfolgenliteral."

Siehe auch: https://en.wikipedia.org/wiki/Escape_sequences_in_C

0
Gnbrkm41 18 Jän. 2019 im 13:58

Sie können so etwas versuchen:

String str = "This is a \"sample\" ";
Console.WriteLine("Original string: {0}", str);
Console.WriteLine("Replaced: {0}", str.Replace('\"', '"'));
-3
Carlos Jafet Neto 18 Jän. 2019 im 13:46

Gewünschte Ausgabe: Dies ist ein Beispiel

Gegebene Zeichenfolge: "This is a \"sample\""

Das Problem: Sie haben Escape-Zeichen, die die doppelten Anführungszeichen vor Interpretation schützen. Das Escape-Zeichen \ ist eine Anweisung, ein Anführungszeichen wörtlich zu verwenden, anstatt es zu verwenden, um einen Bruch in der Zeichenfolge anzuzeigen. Dies bedeutet, dass der tatsächliche Zeichenfolgenwert "This is a "sample"" ist, wenn er als Ausgabe bereitgestellt wird.

Die Antwort zum Entfernen von \ funktioniert möglicherweise, führt jedoch zu stinkendem Code, da das Entfernen eines Escape-Zeichens auf diese Weise unklar machen kann, was Sie beabsichtigen, und Sie daran hindert, einem -Zeichen zu entkommen.

Das Entfernen von " funktioniert möglicherweise, verhindert jedoch die Verwendung von Anführungszeichen und einige IDEs lassen möglicherweise das Escape-Zeichen zurück, um Ihren Tag zu ruinieren.

Wir wollen ein bestimmtes Ziel, die Anführungszeichen um "Probe".

            string sample = "This is a \"sample\"";
            List<string> sampleArray = sample.Split(' ').ToList(); // samplearray is now split into ["This", "is", "a", "\"sample\""]
            var x = sampleArray.FirstOrDefault(t => t == "\"sample\"");  //isolate our needed value
            if (x != null) //prevent a null reference in case something went wrong and samplearray wasnt as expected
            { 
                var index = sampleArray.IndexOf(x); //get the location of the value we just picked
                x = x.Replace("\"", string.Empty); //replace chars
                sampleArray[index] = x; //assign new value to the list

            }
            return String.Join(" ", sampleArray); //return the string joined together with spaces. 
-3
CDove 18 Jän. 2019 im 14:18

Versuche dies:

string line="This is a \"sample\" " ;
replaced =line.Replace(@"\", "");
-4
JJJ 18 Jän. 2019 im 18:50