删除未知索引处的多个字符

Removing several chars at unknown index

所以我试图删除字符串中未知索引处的几个字符。

程序的目的是去除“<”之前的字符。 因此,例如: Te 应该产生输出 Tst 因此 E 和 < 都从字符串中删除。 此外,它应该能够删除多次出现的“<”。 例如,This< is<< Text 应该产生输出 Thi Text

我一直在尝试使用 char[] 和 StringBuilder,但似乎无法完全掌握它。

我目前被这段代码困住了,它没有按照我的意愿去做。

string input = Console.ReadLine();
        
        int indexLocation = input.IndexOf("<");
        int RemoveChar = indexLocation - 1; 
        Console.WriteLine(input.Remove(RemoveChar));

如果字符串有多个“<”并且“<”位于句子中间,则此方法无效。例如 He 输出只是 h

感谢任何答案或提示。我是初级程序员。

一种解决方案可能是使用 Stack<T>。这样,当你遇到 < 时,你就从堆栈中弹出。

Stack<char> stack = new Stack<char>();

foreach (char c in "This< is<< Text")
{
    if (c == '<')
    {
        if (stack.Any())  // Make sure the stack isn't empty
            stack.Pop();
    }
    else
    {
        stack.Push(c);
    }
}

string output = new string(stack.Reverse().ToArray());

输出:

Thi  Text

一种简单的方法是向后遍历字符串并通过递增变量来跟踪找到的 < 个字符。然后,当我们找到一个不同的字符时,如果变量的值大于零,我们就将它递减。否则我们将字符添加到字符串构建器的开头:

var input = "This< is<< Text";
var output = new StringBuilder();
var charsToSkip = 0;

for (int i = input.Length - 1; i >= 0; i--)
{
    if (input[i] == '<')
    {
        charsToSkip++;
    }
    else if (charsToSkip > 0)
    {
        charsToSkip--;
    }
    else
    {
        output.Insert(0, input[i]);
    }
}

input = output.ToString();

尝试以下代码片段:

        string input = Console.ReadLine();
        do
        {
            int indexLocation = input.IndexOf("<");
            int RemoveChar = indexLocation - 1; 
            input = input.Remove(RemoveChar, 2);
        } while (Regex.Matches(input,@"<").Count != 0);
        Console.WriteLine(input);
    

结果将是: