@VanBer

Как НЕ заменять слово в кавычках?

Есть у меня код, который заменяет слова.
Переменная msg отвечает за строки. Пользователь вводит слово "Банан", а программа заменяет слово на "Яблоко", через метод Replace.

Получается много строчек по типу
msg = msg.Replace("Банан"," Яблоко")
msg = msg.Replace("Бургер"," Брокколи")

Но если пользователь введет следующее предложение :

Я сказал: "банан лучше бургера!"

То программа заменит слова в кавычках. А вот теперь вопрос, как на c# найти все слова внутри кавычек и НЕ ЗАМЕНЯТЬ их? Долго бьюсь над этой задачей, не могу понять. Заранее спасибо за помощь.
  • Вопрос задан
  • 186 просмотров
Решения вопроса 1
sarapinit
@sarapinit Куратор тега C#
Точу водой камень
using System;
using System.Text;

namespace Sample
{
    internal static class StringExtentions
    {
        public static string CustomReplace(this string origin, string from, string to, StringComparison stringComparison = StringComparison.Ordinal)
        {
            var sb = new StringBuilder();
            
            int position = 0;
            do
            {
                var quoteStart = origin.IndexOf('"', position);
                if (quoteStart == -1)
                    quoteStart = origin.Length;
                var headLength = quoteStart - position;
                if (headLength > 0)
                {
                    sb.Append(origin.Substring(position, headLength).Replace(from, to, stringComparison));
                }

                position = quoteStart;
                if(position == origin.Length) break;
                
                var quoteEnd = origin.IndexOf('"', position + 1);
                if (quoteEnd == -1)
                    quoteEnd = origin.Length;

                var tailLength = quoteEnd + 1 - position;
                if (tailLength > 0)
                {
                    sb.Append(origin.Substring(position, tailLength));
                }
                
                position = quoteEnd + 1;

            } while (position < origin.Length);
            
            return sb.ToString();
        }
    }
    
    internal class Program
    {
        private static void Main(string[] args)
        {
            Console.WriteLine("Я сказал: \"БАНАН не банан\", но банан не согласен со мной. Но я отвечу этому банану: \"бананством\"".CustomReplace("банан", "яблоко", StringComparison.OrdinalIgnoreCase));
        }
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы