获取正确的字符串位置 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!}
目的是检查"}"是否是字符串的右大括号,并且它不应在任何其他行中显示为单个字符。
我的方法是这样的:
在上面的字符串中,我想获取主字符串中"}"的位置。然后检查该位置后面是否有字符,以检查它是否是右大括号。
但是我无法获得"}"的正确位置,因为它也可能出现在其他行中。
有没有更好的方法可以解决这个问题?
在单个字符串中,听起来您应该遍历字符串中的字符,并计算您看到的左大括号和右大括号的数量。像这样:
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
)推到堆栈上。当您看到一个}
时,如果堆栈不为空,则弹出它以找到匹配的左大括号。
接下来,您需要考虑是否需要转义大括号以删除它们的"特殊"含义......在这一点上,事情再次变得更加复杂。