Как сделать проверку на корректность расстановки скобок в этом коде?

 - public class Calulator {    public static String
   ExpressionToRPN(String Expr) {
          String current = "";
          Stack<Character> stack = new Stack<>();
          int priority;
          for (int i = 0; i < Expr.length(); i++) {
              priority = getP(Expr.charAt(i));
              if (priority == 0) current += Expr.charAt(i);
              if (priority == 1) stack.push(Expr.charAt(i));
              if (priority > 1) {
                  current += ' ';
                  while (!stack.empty()) {
                      if (getP(stack.peek()) >= priority) current += stack.pop();
                      else break;
                  }
                  stack.push(Expr.charAt(i));
              }
              if (priority == -1) {
                  current += ' ';
                  while (getP(stack.peek()) != 1) current += stack.pop();
                  stack.pop();
              }
          }
          while (!stack.empty()) current += stack.pop();
      
          return current;    }
          public static double RPNtoAnswer(String rpn) {
          String operand = new String();
          Stack<Double> stack = new Stack<>();
          for (int i = 0; i < rpn.length(); i++) {
              if (rpn.charAt(i) == ' ') continue;
              if (getP(rpn.charAt(i)) == 0) {
                  while (rpn.charAt(i) != ' ' && getP(rpn.charAt(i)) == 0) {
                      operand += rpn.charAt(i++);
                      if (i == rpn.length())
                          break;
                      stack.push(Double.parseDouble(operand));
                      operand = new String();
                  }
              }
              if (getP(rpn.charAt(i)) > 1) {
                  double a = stack.pop(), b = stack.pop();
                  if (rpn.charAt(i) == '+') stack.push(b + a);
                  if (rpn.charAt(i) == '-') stack.push(b - a);
                  if (rpn.charAt(i) == '*') stack.push(b * a);
              }
          }
      
      
          return stack.pop();    }
          private static int getP(char token) {
          if (token == '*' || token == '/') return 3;
          else if (token == '+' || token == '-') return 2;
          else if (token == '(') return 1;
          else if (token == ')') return -1;
          else return 0;    }
      
      
          }

Ответы (1 шт):

Автор решения: Agzam

Код

public class Main {

    public static void main(String[] args) {
        System.out.println(check("5 + (5 * 5)"));
        System.out.println(check("5 + )5 * 5("));
        System.out.println(check("5 + (5 * 5))((5 * 5)"));
        System.out.println(check("5 + (5 * 5)((5 + 5))(5 * 5)"));
    }

    public static boolean check(String str) {
        int b = 0;
        for(char c : str.toCharArray()) { // Проходимся по всем символам в строке
            if(c == '(') b++;
            if(c == ')') b--;
            if(b < 0) return false; // Значит есть закрывающая скобка, но нет открывающей
        }
        return b == 0; // Если 0 - то все хорошо, иначе - количество открывающих и закрывающих не совпадает
    }
}

Вывод:

true
false
false
true
→ Ссылка