How to determine if a text has balanced delimiters?

点点圈 提交于 2019-12-10 12:03:25

问题


I have this question,

Write a function to determine if a text has balanced delimiters. The pairs of valid delimiters are (), [], {}, and <>. They may be nested. In addition, determine that text delimiters ' and " are properly matched.

I am coding in java by the way..

For each test line, output is "1" if it has balanced delimiters, "0" otherwise.

An example below,

4 --- 0

{123} --- 1

{qweqwe{sdad} --- 0

The problem, is, how can I write in java code, to check whether the pair of valid delimiters are matched? Sorry, I have very little knowledge of delimiters.

Below is my code..

public static void main(String args[]) {
        String a1 = "";
        try {
            Scanner readFile = new Scanner(new File("2.in.txt"));
            while (readFile.hasNextLine()) {

                a1 = readFile.nextLine();
                System.out.println(a1);
                if (a1.equals("18")) {
                    System.out.println("0");
                } else {
                    System.out.println("1");
                }
            }
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
            return;
        }
    }

回答1:


Have a look at this code, it solves a similar task.

import java.util.Stack;

class BracketChecker {
  private String input;

  public BracketChecker(String in) {
    input = in;
  }

  public void check() {
    Stack<Character> theStack = new Stack<Character>();

    for (int j = 0; j < input.length(); j++) {
      char ch = input.charAt(j);
      switch (ch) {
      case '{': 
      case '[':
      case '(':
        theStack.push(ch);
        break;
      case '}': 
      case ']':
      case ')':
        if (!theStack.isEmpty()) {
          char chx = theStack.pop();
          if ((ch == '}' && chx != '{') || (ch == ']' && chx != '[') || (ch == ')' && chx != '('))
            System.out.println("Error: " + ch + " at " + j);
        } else

          System.out.println("Error: " + ch + " at " + j);
        break;
      default:
        break;
      }
    }
    if (!theStack.isEmpty()){
      System.out.println("Error: missing right delimiter");
    }
  }
}

public class MainClass {
  public static void main(String[] args) {
    String input;
    input = "[]]()()";

    BracketChecker theChecker = new BracketChecker(input);
    theChecker.check();
  }

}



回答2:


The general solution for this problem is to use a Stack. For each input string, starting with an empty stack:

  • When an open bracket is encountered, push it into the stack.
  • When a close bracket is encountered, pop from stack and compare with the close bracket to see whether they are a matching pair. If not, return false. If yes, continue.

When you have finished going through the string, check whether the stack is empty. If yes, return true, else return false.

For the case of quotes ' and ", if you disallow a quote to be inside the same quote, and you don't consider escape syntax, then the solution should be the same.



来源:https://stackoverflow.com/questions/11610847/how-to-determine-if-a-text-has-balanced-delimiters

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!