java - 如果括号匹配则返回 true 的 boolean 方法

标签 java regex string char

我正在尝试编写一个方法,它接受一串花括号,如果括号匹配则返回 true,否则返回 false。

这些是括号匹配的例子:

{ }

{ } { }

{{}}

{ { { } { { } } } }

这些是括号不匹配的例子:

{

} {

{{}

{ { } } } { }

我无法弄清楚这段代码背后的正确逻辑。我首先尝试了 length() mod 2,只有当结果为 0 时,该方法才会返回 true。但很明显,有一个错误,因为即使对于 } { 之类的字符串,它也会返回 true。我添加了一些代码来检测 {,如果没有找到 },它会自动返回 false。但我仍然收到错误。

这是我的代码:

public boolean bracketsMatch(String brackets)
{
    if(!(brackets.length() % 2 == 0))
    {
        int i = 0;
        int j = 0;
        boolean check = false;
        while(brackets.charAt(i) == '{')
        {
            for(int o = i + 1; o < brackets.length(); o++)
            {
                if(o == '}')
                {
                    check = true;
                    break;
                }
                else
                {
                j++;
                }
            }

            if(check == false)
                return false;

            i + = j;
        }

        return true;
    }
    else
    {
        return false;
    }
}

这个问题的正确逻辑是什么,我犯了什么错误?谢谢!

最佳答案

使用计数器。当你找到 { 时增加它,当你找到 } 时减少它。如果在某个时候计数器为负,则字符串无效。如果在处理完所有字符后计数器为 0,则返回 true。

好的

{ }
1 0

{ } { }
1 0 1 0

{ { } }
1 2 1 0

{ { { } { { } } } }
1 2 3 2 3 4 3 2 1 0

不行

{
1

}  {
-1   <- no point checking farther

{ { }
1 2 1 

{ { } }  } { }
1 2 1 0 -1  <- no point checking farther

关于java - 如果括号匹配则返回 true 的 boolean 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36095578/

相关文章:

java - 如何从java中的响应中获取一部分?

php - 错误 : Array to string conversion error

java - 错误: Attempt to invoke virtual method on null object reference 'android.database.Cursor com.myapplication.DatabaseHeleper.getData()'

java - smack 4.2.0 Beta2 与 openfire 3.8.1 兼容吗?

java - 从 JSON 字符串创建 BSON 对象

javascript - 正则表达式提取括号和函数名称

php - 根除电子邮件地址的模式

java - 在 Java 中从 CharSequence 转换为 String

java - 恰好 n 次 - 组

c - 递归地反转C中的数组