6 Stimmen

Wie kann ich ein bestimmtes Wort in C# ersetzen?

Betrachten Sie das folgende Beispiel.

string s = "The man is old. Them is not bad.";

Wenn ich die

s = s.Replace("The", "@@");

Dann gibt er zurück "@@ man is old. @@m is not bad."
Aber ich möchte, dass die Ausgabe lautet "@@ man is old. Them is not bad."

Wie kann ich das tun?

0 Stimmen

Warum wurde der Titel so geändert, dass er Regex enthält? Es gibt mehr als eine Möglichkeit, Text zu ersetzen. Ich versuche in der Regel, Regex zu vermeiden, weil es langsam ist. Ich denke also nicht, dass der Titel so bearbeitet werden sollte, dass er die "angenommene" Antwort enthält.

1 Stimmen

@Chris Persichetti: Das ist in Ordnung; ich habe "regex" aus dem Titel entfernt. (Ich hatte es aufgrund der Tags hinzugefügt, aber "regex" gehörte anscheinend ohnehin nicht zu den ursprünglichen Tags.)

23voto

Liron Yahdav Punkte 9172

Hier sehen Sie, wie Sie eine Regex verwenden, die alle Wortgrenzen berücksichtigt:

Regex r = new Regex(@"\bThe\b");
s = r.Replace(s, "@@");

4voto

Crispy Punkte 5477

Ich habe oben einen Kommentar abgegeben, in dem ich fragte, warum der Titel geändert wurde, um anzunehmen, dass Regex verwendet werden sollte.

Ich persönlich versuche, Regex nicht zu verwenden, weil es langsam ist. Regex ist großartig für komplexe Zeichenkettenmuster, aber wenn die Ersetzung von Zeichenketten einfach ist und Sie eine gewisse Leistung benötigen, werde ich versuchen, einen Weg zu finden, ohne Regex zu verwenden.

Wir haben einen Test gemacht. Durchführen einer Million Ersetzungen mit Regex und String-Methoden.

Regex nahm 26,5 Sekunden bis zur Fertigstellung, String-Methoden benötigten 8 Sekunden zu vervollständigen.

        //Using Regex. 
        Regex r = new Regex(@"\b[Tt]he\b");

        System.Diagnostics.Stopwatch stp = System.Diagnostics.Stopwatch.StartNew();

        for (int i = 0; i < 1000000; i++)
        {
            string str = "The man is old. The is the Good. Them is the bad.";
            str = r.Replace(str, "@@");
        }

        stp.Stop();
        Console.WriteLine(stp.Elapsed);

        //Using String Methods.
        stp = System.Diagnostics.Stopwatch.StartNew();

        for (int i = 0; i < 1000000; i++)
        {
            string str = "The man is old. The is the Good. Them is the bad.";

            //Remove the The if the stirng starts with The.
            if (str.StartsWith("The "))
            {
                str = str.Remove(0, "The ".Length);
                str = str.Insert(0, "@@ ");
            }

            //Remove references The and the.  We can probably 
            //assume a sentence will not end in the.
            str = str.Replace(" The ", " @@ ");
            str = str.Replace(" the ", " @@ ");
        }

        stp.Stop();
        Console.WriteLine(stp.Elapsed);

3voto

D'Arcy Rittich Punkte 159655

S = s.Replace("Die ","@@ ");

0voto

Coder Punkte 37

C#-Konsolenanwendung

static void Main(string[] args)

        {
            Console.Write("Please input your comment: ");
            string str = Console.ReadLine();
            string[] str2 = str.Split(' ');
            replaceStringWithString(str2);
            Console.ReadLine();
        }
        public static void replaceStringWithString(string[] word)
        {
            string[] strArry1 = new string[] { "good", "bad", "hate" };
            string[] strArry2 = new string[] { "g**d", "b*d", "h**e" };
            for (int j = 0; j < strArry1.Count(); j++)
            {
                for (int i = 0; i < word.Count(); i++)
                {
                    if (word[i] == strArry1[j])
                    {
                        word[i] = strArry2[j];
                    }
                    Console.Write(word[i] + " ");
                }
            }
        }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X