Como posso substituir uma palavra específica em C #?

votos
6

Considere o seguinte exemplo.

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

Se eu usar

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

Em seguida, ele retorna @@ man is old. @@m is not bad.
Mas eu quero que a saída seja@@ man is old. Them is not bad.

Como posso fazer isso?

Publicado 19/05/2009 em 21:06
fonte usuário
Em outras línguas...                            


4 respostas

votos
23

Veja como você usaria um regex, que iria lidar com quaisquer limites de palavra:

Regex r = new Regex(@"\bThe\b");
s = r.Replace(s, "@@");
Respondeu 19/05/2009 em 21:16
fonte usuário

votos
4

Eu fiz um comentário acima perguntando por que o título foi mudado para assumir Regex era para ser usado.

Eu, pessoalmente, tentar não usar Regex porque é lento. Regex é grande para os padrões de cordas complexas, mas se as substituições de corda são simples e você precisa de algum desempenho fora dele, vou tentar e encontrar uma forma sem usar Regex.

Joguei junto um teste. Correndo de um milhão de replacments com Regex e métodos de cordas.

Regex levou 26,5 segundos para completar, métodos string levou 8 segundos para ser concluído.

        //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);
Respondeu 19/05/2009 em 22:42
fonte usuário

votos
3

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

Respondeu 19/05/2009 em 21:08
fonte usuário

votos
0

C Aplicação # consola

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] + " ");
                }
            }
        }
Respondeu 03/06/2014 em 13:16
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more