【问题标题】:Get correct string position C#获取正确的字符串位置 C#
【发布时间】:2014-11-27 06:51:14
【问题描述】:

我有一个字符串:

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

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

我的做法是这样的:

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

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

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

【问题讨论】:

  • “}”是什么意思?很容易有多个右大括号...
  • 你要检查字符串是否以}结尾?
  • 为什么一开始就关闭 } 而没有打开 {?
  • 如果要获取字符串中} 的最后一个索引,您可以使用str.LastIndexOf('}');
  • 你应该为此使用正则表达式

标签: c# string position


【解决方案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&lt;int&gt; 而不仅仅是计数。然后,当您看到 { 时,您将索引 (i) 推入堆栈。当您看到 } 时,如果堆栈不为空,则将其弹出以查找匹配的左大括号。

接下来,您需要考虑是否需要转义大括号以删除它们的“特殊”含义......此时事情再次变得更加复杂。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 2012-10-22
    • 2017-09-30
    • 2012-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多