Java 正在尝试检查有效的括号/括号对

Java 正在尝试检查有效的括号/括号对,java,for-loop,boolean,character,Java,For Loop,Boolean,Character,给定一个由括号、方括号等组成的字符串,如果配对正确,我将尝试返回true。(有一些类似的问题,但它们涉及更复杂的内容,如数组、字符串中的其他字符等。) 这是我的代码,输入“()”时返回false 类解决方案{ 公共布尔值无效(字符串s){ 如果(s.长度()

给定一个由括号、方括号等组成的字符串,如果配对正确,我将尝试返回true。(有一些类似的问题,但它们涉及更复杂的内容,如数组、字符串中的其他字符等。)

这是我的代码,输入“()”时返回false

类解决方案{
公共布尔值无效(字符串s){
如果(s.长度()<2){
返回false;
}
对于(int i=0;i
任何帮助或建议都将不胜感激

您可以使用一个方法来解决此问题

假设您开始循环字符串中的字符,并且您有一个堆栈

如果您将开始括号推到堆栈上,然后在相应的结束括号出现时从堆栈中弹出括号-您应该在检查字符串结束时有一个空堆栈

如果堆栈在字符串循环的末尾为空,则所有括号都将成对出现

如果堆栈为空且还有更多字符要检查(即循环未完成),则括号不成对

如果找到一个右括号,然后从堆栈中弹出,但没有找到相应的左括号,这也意味着括号没有正确配对。对于这种情况,您可以使用以下代码:

private static boolean match(char fromStack, char next) {
    return fromStack == '[' && next == ']' || fromStack == '{' && next == '}' || fromStack == '(' && next == ')';
}

现在,您只是试图确保两个连续字符不相同,但是“)(”和“(}”满足该条件并且不是有效对。正如@luk2302所评论的,您应该在字符串中每2个字符迭代一次。因此,您不应该在for循环中使用
i++
,而应该使用
i+=2

但我认为另一种方法是使用正则表达式:

public boolean isValid(String s) {
    // if null, or its length is zero or odd then is automatically invalid
    if (s == null || s.length() == 0 || s.length() % 2 != 0) {
        return false;
    }

    return s.matches("(\\(\\)|\\{\\}|\\[\\])+");
}
此正则表达式将匹配“()”、“{}”和“[]”1次或更多次

以下是一些测试输出:

()有效:true
)(有效:false
(}有效:false
()()有效:true
()(有效:false
(){}[]有效: 正确


不要
返回false;
。当然
不同)
.wow,当然。谢谢!仍然不确定如何检查?您必须基本上硬编码开始括号和结束括号的字符,并将字符与这些字符进行比较。请注意,如果
i+=2
长度%2!=0
通常使用堆栈解决这些问题,您可能必须首先返回
你有选择吗?@Liz请阅读:
public boolean isValid(String s) {
    // if null, or its length is zero or odd then is automatically invalid
    if (s == null || s.length() == 0 || s.length() % 2 != 0) {
        return false;
    }

    return s.matches("(\\(\\)|\\{\\}|\\[\\])+");
}