删除引号之间的文本

时间:2016-01-21 10:42:50

标签: c# string text-manipulation

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

示例:

  

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++;
                }
            }
        }

我不知道如何在控制台的引号之间写入没有文本的字符串。 我不允许使用复制方法,如正则表达式。

7 个答案:

答案 0 :(得分: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];
    }
}

希望这有帮助!

答案 1 :(得分: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);

它的作用:

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

您可以通过搜索字符串结尾并替换所有匹配项来自行改进。你必须记住新的第一个索引&#39;你必须搜索。

答案 2 :(得分:3)

首先我们需要拆分字符串,然后删除奇数项:

JSON

答案 3 :(得分:2)

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);

请试一试。

答案 4 :(得分:1)

这可能是一个解决方案:

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

您只需将文字拆分为,然后将两个部分一起添加并添加旧的。不是一个非常好的解决方案,但无论如何都可以。

€二叔:

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

答案 5 :(得分:1)

你可以这样做:

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变量)。

答案 6 :(得分:1)

使用引号的所有索引使用子字符串删除引号之间的文本。

    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();
    }
  

输出:今天是非常&#34;&#34;炎热的一天。第二次与#34;&#34;测试&#34 ;;

此处dotNetFiddle