删除引号之间的文本

Jol*_*111 6 c# string text-manipulation

我有一个程序,你可以在其中输入一个字符串.但我希望删除引号""之间的文字.

例:

在:今天是一个非常"美好"和炎热的一天.

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++;
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

我不知道如何在引号之间没有文本的情况下将字符串写入控制台.我不允许使用像正则表达式这样的复杂方法.

Gig*_*San 8

这应该可以解决问题.它会检查字符串中的每个字符是否有引号.如果它找到引号然后设置一个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];
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 如果用这种方式反转`quotesOpened`的值,你可以编写块:`quotesOpened =!quotesOpened`. (2认同)

Pat*_*man 6

没有正则表达式,我更喜欢,但没关系:

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);
Run Code Online (Sandbox Code Playgroud)

它能做什么:

  • 它搜索第一次出现的 "
  • 然后它搜索第二次出现的 "
  • 然后是第一部分,包括第一部分"和第二部分,包括第二部分"

您可以通过搜索直到字符串的结尾并替换所有匹配项来自行改进.您必须记住您必须搜索的新"第一个索引".