Как я могу заменить определенное слово в C #? - PullRequest
6 голосов
/ 20 мая 2009

Рассмотрим следующий пример.

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

Если я использую

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

Затем возвращается "@@ man is old. @@m is not bad."
Но я хочу, чтобы результат был "@@ man is old. Them is not bad."

Как я могу это сделать?

Ответы [ 4 ]

23 голосов
/ 20 мая 2009

Вот как вы бы использовали регулярное выражение, которое обрабатывало бы любые границы слов:

Regex r = new Regex(@"\bThe\b");
s = r.Replace(s, "@@");
4 голосов
/ 20 мая 2009

Я сделал комментарий выше, спрашивая, почему название было изменено, чтобы предположить, что Regex должен был использоваться.

Лично я стараюсь не использовать Regex, потому что он медленный. Regex отлично подходит для сложных строковых шаблонов, но если замены строк просты и вам нужна некоторая производительность, я постараюсь найти способ без использования Regex.

Скинул вместе тест. Выполнение миллиона замен с помощью регулярных выражений и строковых методов.

Regex потребовалось 26,5 секунд для завершения, строковые методы заняли 8 секунд для завершения.

        //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);
3 голосов
/ 20 мая 2009

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

0 голосов
/ 03 июня 2014

C # Консольное приложение

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] + " ");
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...