如何检查大括号之间是否存在数字

时间:2018-02-20 06:36:17

标签: java logic core

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

public class CheckValidLocationofParenthensies {

    public static void main(String args[]) {
         Scanner scanner = new Scanner(System.in);
            System.out.print("Enter five data");
            String input1 = scanner.next();

     balancedParenthensies(input1);

    }

    public static boolean balancedParenthensies(String s) {
        Stack<Character> stack  = new Stack<Character>();
        for(int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if(c == '[' || c == '(' || c == '{' ) { 
             stack.push(c);
             if(c == '[') {
                 newvalueforforward(s,']', i);
            }
            if(c == '{') {
                newvalueforforward(s,'}', i);
            }
            if(c == '(') {
                newvalueforforward(s,')', i);
            }

            } else if(c == ']') {
                if(stack.isEmpty() || stack.pop() != '[') {
                    newvalue(s,'[', i);
                    return false;
                }
            } else if(c == ')') {
                if(stack.isEmpty() || stack.pop() != '(') {
                    newvalue(s,'(', i);
                 return false;
                }           
            } else if(c == '}') {
                if(stack.isEmpty() || stack.pop() != '{') {
                    newvalue(s,'{', i);
                    return false;
                }
            }

        }
        return stack.isEmpty();
    }

    public static void newvalueforforward(String userval,char value,int decremntval) {

         for(int i = 0; i < userval.length(); i++){

             StringBuilder newvalue = new StringBuilder(userval);

            int location=i;
             newvalue.insert(i, value);

             boolean valid= checkingnewvalueisValidorNot(newvalue, location);
             location=i+1;
             if(valid) {
                System.out.println(newvalue+"   "+""+location); 

             }

        }

    }

 public static void newvalue(String userval,char value,int decremntval) {


        for(int i = decremntval; i >= 0; i--){

             StringBuilder newvalue = new StringBuilder(userval);
            int location=decremntval - i;
             newvalue.insert(decremntval - i, value);

             boolean valid= checkingnewvalueisValidorNot(newvalue, location);

             if(valid) {
                 System.out.println(newvalue+"   "+""+location); 

             }

        }

    }



public static boolean checkingnewvalueisValidorNot(StringBuilder userval,int validpath) {

     Stack<Character> stack  = new Stack<Character>();
     for(int i = 0; i < userval.length(); i++) {
         char c = userval.charAt(i);
         if(c == '[' || c == '(' || c == '{' ) { 

             stack.push(c);
         } else if(c == ']') {
             if(stack.isEmpty() || stack.pop() != '[') {
                 return false;
             }
         } else if(c == ')') {
             if(stack.isEmpty() || stack.pop() != '(') {            
                 return false;
             }           
         } else if(c == '}') {
             if(stack.isEmpty() || stack.pop() != '{') {
               return false;
             }
         }

     }
     return stack.isEmpty();

    }


}

上面是我编写的代码,用于检查输入字符串是否包含所有平衡括号(如果它不平衡)然后获取缺少括号并将括号放在所有索引中然后再次检查字符串是否平衡。

我得到了有效的输出,但问题是我支架之间应该有一个中间人

这里是输入和输出

input         missing     outputs
{[(2+3)*6/10}   ]   {[](2+3)*6/10}   3 not valid(no numbres btn bracket)
                    {[(2+3)]*6/10}   8 valid
                    {[(2+3)*]6/10}   9   not valid(after * no number)
                    {[(2+3)*6]/10}   10  valid
                    {[(2+3)*6/]10}   11 not valid( / before bracket)
                    {[(2+3)*6/1]0}   12 not valid( / btn num bracket)
                    {[(2+3)*6/10]}   13 valid

我无法对输出进行适当的验证。

1 个答案:

答案 0 :(得分:0)

在括号之前可能有:

  • 关闭括号

括号后可能有:

  • 运算符
  • 关闭括号
  • 表达结束

(忽略任何空格)