我有一个字符串:
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!}
目的是检查“}”是否是字符串的右括号,并且它不应该在任何其他行中显示为单个字符。
我的方法是:
在上面的字符串中,我想获得主字符串中“}”的位置。然后检查该位置后面是否有字符来检查它是否是右括号。
但我无法获得“}”的正确位置,因为它可能会出现在其他行中。
有没有更好的方法可以解决这个问题?
答案 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
)推入堆栈。当您看到}
时,如果堆栈不为空,则弹出它以找到匹配的左括号。
接下来你需要考虑是否需要逃避括号以消除它们的“特殊”含义......此时事情会变得更加复杂。