获取正确的字符串位置 C#

本文关键字:位置 字符串 获取 | 更新日期: 2023-09-27 18:32:22

我有一个字符串:

string str = "Wishing you {all a great} day {ahead}. 'n Thanks a lot 'n } 'n for {your} help!}"
我一行

一行地阅读字符串。所以目前我有 4 行:

1. Wishing you {all a great} day {ahead}.
2. Thanks a lot
3.  }
4. for {your} help!}

目的是检查"}"是否是字符串的右大括号,并且它不应在任何其他行中显示为单个字符。

我的方法是这样的:

在上面的字符串中,我想获取主字符串中"}"的位置。然后检查该位置后面是否有字符,以检查它是否是右大括号。

但是我无法获得"}"的正确位置,因为它也可能出现在其他行中。

有没有更好的方法可以解决这个问题?

获取正确的字符串位置 C#

在单个字符串中,听起来您应该遍历字符串中的字符,并计算您看到的左大括号和右大括号的数量。像这样:

int open = 0;
for (int i = 0; i < text.Length; i++)
{
    switch (text[i])
    {
        case '{':
            open++;
            break;
        case '}':
            if (open > 0)
            {
                open--; // Matches an opening brace
            }
            else
            {
                // Whatever you want to do for an unmatched brace
            }
            break;
        default: // Do nothing
            break;
    }
}

如果您需要知道左大括号的位置,您可能需要一个Stack<int>而不仅仅是计数。然后当你看到一个{时,你把索引(i)推到堆栈上。当您看到一个}时,如果堆栈不为空,则弹出它以找到匹配的左大括号。

接下来,您需要考虑是否需要转义大括号以删除它们的"特殊"含义......在这一点上,事情再次变得更加复杂。