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

时间:2014-11-27 06:51:15

标签: c# string position

我有一个字符串:

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!}

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

我的方法是:

在上面的字符串中,我想获得主字符串中“}”的位置。然后检查该位置后面是否有字符来检查它是否是右括号。

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

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

1 个答案:

答案 0 :(得分:1)

在一个字符串中,听起来你应该遍历字符串中的字符,并计算你看到的开放数和闭合数的数量。像这样:

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)推入堆栈。当您看到}时,如果堆栈不为空,则弹出它以找到匹配的左括号。

接下来你需要考虑是否需要逃避括号以消除它们的“特殊”含义......此时事情会变得更加复杂。