Удалить текст между кавычками

У меня есть программа, в которой вы можете ввести строку. Но я хочу, чтобы текст между кавычками "" был удален.

пример:

in: сегодня очень "хороший" и жаркий день.

out: сегодня очень "" и жаркий день.

        Console.WriteLine("Enter text: ");
        text = Console.ReadLine();

        int letter;
        string s = null;
        string s2 = null;
        for (s = 0; s < text.Length; letter++)
        {
            if (text[letter] != '"')
            {
                s = s + text[letter];
            }
            else if (text[letter] == '"')
            {

                s2 = s2 + letter;
                letter++;
                (text[letter] != '"')
                {
                    s2 = s2 + letter;
                    letter++;
                }
            }
        }

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

7 ответов


это должно сделать трюк. Он проверяет каждый символ в строке в кавычки. Если он находит кавычки, то устанавливает quotesOpened флаг true, поэтому он будет игнорировать любой последующий символ.

когда он встречает другие кавычки, он устанавливает флаг в false, поэтому он возобновит копирование символов.

Console.WriteLine("Enter text: ");
text = Console.ReadLine();

int letterIndex;
string s2 = "";
bool quotesOpened = false;
for (letterIndex= 0; letterIndex< text.Length; letterIndex++)
{
    if (text[letterIndex] == '"')
    {
        quotesOpened = !quotesOpened;

        s2 = s2 + text[letterIndex];
    }
    else 
    {
        if (!quotesOpened)
            s2 = s2 + text[letterIndex];
    }
}

надеюсь, что это помогает!


взять без регулярных выражений, которые мне больше нравятся, но хорошо:

string input = "abc\"def\"ghi";
string output = input;

int firstQuoteIndex = input.IndexOf("\"");

if (firstQuoteIndex >= 0)
{
    int secondQuoteIndex = input.IndexOf("\"", firstQuoteIndex + 1);

    if (secondQuoteIndex >= 0)
    {
        output = input.Substring(0, firstQuoteIndex + 1) + input.Substring(secondQuoteIndex);
    }
}

Console.WriteLine(output);

принцип действия:

  • он ищет первое вхождение "
  • затем он ищет второе вхождение "
  • затем он принимает первую часть, в том числе первый " и вторая часть, включая вторую "

вы можете улучшить это самостоятельно, выполнив поиск до конца строки и замените все вхождения. Вы должны помнить новый "первый индекс", который вы должны искать.


Сначала нам нужно разделить строку, а затем удалить нечетные элементы:

    private static String Remove(String s)
    {
        var rs = s.Split(new[] { '"' }).ToList();
        return String.Join("\"\"", rs.Where(_ => rs.IndexOf(_) % 2 == 0));
    }

    static void Main(string[] args)
    {
        var test = Remove("hello\"world\"\"yeah\" test \"fhfh\"");
        return;
    }

string text = @" Today is a very ""nice"" and hot day. Second sentense with ""text"" test";
Regex r = new Regex("\"([^\"]*)\"");
var a = r.Replace(text,string.Empty);

пожалуйста, попробуйте это.


это было бы возможным решением:

String cmd = "This is a \"Test\".";
// This is a "".
String newCmd = cmd.Split('\"')[0] + "\"\"" + cmd.Split('\"')[2];
Console.WriteLine(newCmd);
Console.Read();

вы просто разделить текст на " а затем добавьте обе части вместе и добавьте старый ". Не очень хорошее решение, но оно все равно работает.

€dit:

cmd[0] = "This is a "
cmd[1] = "Test"
cmd[2] = "."

Вы можете сделать это так:

Console.WriteLine("Enter text: ");
var text = Console.ReadLine();

var skipping = false;

var result = string.Empty;

foreach (var c in text)
{
    if (!skipping || c == '"') result += c;
    if (c == '"') skipping = !skipping;
}

Console.WriteLine(result);

Console.ReadLine();

строка результата создается путем добавления символов из исходной строки, пока мы не находимся между кавычками (используя skipping переменной).


взять все индексы кавычек удалить текст между кавычками с помощью подстроки.

    static void Main(string[] args)
    {
        string text = @" Today is a very ""nice"" and hot day. Second sentense with ""text"" test";

        var foundIndexes = new List<int>();
        foundIndexes.Add(0);
        for (int i = 0; i < text.Length; i++)
        {
            if (text[i] == '"') 
                foundIndexes.Add(i);

        }

        string result = "";

        for(int i =0; i<foundIndexes.Count; i+=2)
        {
            int length = 0;

            if(i == foundIndexes.Count - 1)
            {
                length = text.Length - foundIndexes[i];
            }
            else
            {
                length = foundIndexes[i + 1] - foundIndexes[i]+1;
            }
            result += text.Substring(foundIndexes[i], length);

        }

        Console.WriteLine(result);
        Console.ReadKey();
    }

вывод: Сегодня очень "" и жаркий день. Второй sentense с "" тест";

здесь dotNetFiddle