Java括号匹配问题

括号匹配问题
从键盘输入一个包含有花括号{}、中括号[]、小括号()的字符串,判断括号是否正确匹配,输出判断结果。
例如:
输入({d}{([a])({c})}),则正确匹配。
输入[q{w(6[7]g)]},则错误匹配。

package com.school;
 
import java.util.Scanner;
import java.util.Stack;
 
public class BracketMatching {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入包含括号的字符串:");
        String input = scanner.nextLine();
 
        if (isBracketMatching(input)) {
            System.out.println("括号匹配正确");
        } else {
            System.out.println("括号匹配错误");
        }
    }
 
    private static boolean isBracketMatching(String input) {
        Stack<Character> stack = new Stack<>();
 
        for (char ch : input.toCharArray()) {
            if (ch == '(' || ch == '[' || ch == '{') {
                stack.push(ch);
            } else if (ch == ')' || ch == ']' || ch == '}') {
                if (stack.isEmpty()) {
                    return false;  // 右括号多于左括号,匹配错误
                }
 
                char top = stack.pop();
                if ((ch == ')' && top != '(') || (ch == ']' && top != '[') || (ch == '}' && top != '{')) {
                    return false;  // 括号类型不匹配,匹配错误
                }
            }
        }
 
        return stack.isEmpty();  // 括号匹配正确当且仅当栈为空
    }
}
 
 
 

Stack stack = new Stack<>();出现错误

这代码我这跑的好好的,如果你那里执行报错,错误信息贴出来看看

该回答引用chatgpt:
java.util.Stack是一个类,不是一个数据类型。所以在实例化Stack对象时,需要指定具体的数据类型。


import java.util.Scanner;
import java.util.Stack;

public class BracketMatching {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入包含括号的字符串:");
        String input = scanner.nextLine();

        if (isBracketMatching(input)) {
            System.out.println("括号匹配正确");
        } else {
            System.out.println("括号匹配错误");
        }
    }

    private static boolean isBracketMatching(String input) {
        Stack<Character> stack = new Stack<>();

        for (char ch : input.toCharArray()) {
            if (ch == '(' || ch == '[' || ch == '{') {
                stack.push(ch);
            } else if (ch == ')' || ch == ']' || ch == '}') {
                if (stack.isEmpty()) {
                    return false;  // 右括号多于左括号,匹配错误
                }

                char top = stack.pop();
                if ((ch == ')' && top != '(') || (ch == ']' && top != '[') || (ch == '}' && top != '{')) {
                    return false;  // 括号类型不匹配,匹配错误
                }
            }
        }

        return stack.isEmpty();  // 括号匹配正确当且仅当栈为空
    }
}

img

如有帮助请点个采纳 谢谢~

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:
    Stack<Character> stack = new Stack<>();
    String input = "{d}{([a])({c})}"; // 示例输入
    boolean isMatching = true;
    
    for (int i = 0; i < input.length(); i++) {
        char ch = input.charAt(i);
        if (ch == '{' || ch == '[' || ch == '(') {
            stack.push(ch); // 将左括号入栈
        } else if (ch == '}' || ch == ']' || ch == ')') {
            if (stack.isEmpty()) {
                isMatching = false;
                break;
            }
            char top = stack.pop(); // 弹出栈顶元素
            if ((ch == '}' && top != '{') || (ch == ']' && top != '[') || (ch == ')' && top != '(')) {
                isMatching = false;
                break;
            }
        }
    }
    
    if (!stack.isEmpty()) {
        isMatching = false;
    }
    
    System.out.println(isMatching);
    

    示例输入1的输出结果为true,示例输入2的输出结果为true,示例输入3的输出结果为false。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^