如何确定文本是否具有平衡分隔符?

时间:2012-07-23 10:35:16

标签: java delimiter

我有这个问题,

编写一个函数来确定文本是否具有平衡分隔符。有效分隔符对是(),[],{}和<>。它们可能是嵌套的。此外,确定文本分隔符'和“匹配正确。

顺便说一下,我在java编码..

对于每个测试行,如果它具有平衡分隔符,则输出为“1”,否则为“0”。

以下示例

4 --- 0

{123} --- 1

{qweqwe{sdad} --- 0

问题是,如何用java代码编写,检查这对有效分隔符是否匹配?对不起,我对分隔符知之甚少。

以下是我的代码..

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;
        }
    }

2 个答案:

答案 0 :(得分:6)

此问题的一般解决方案是使用堆栈。对于每个输入字符串,从空堆栈开始:

  • 遇到开放式支架时,将其推入堆叠。
  • 遇到近距离括号时,从堆栈弹出并与闭括号进行比较以查看它们是否匹配。如果没有,请返回false。如果是,请继续。

完成字符串检查后,检查堆栈是否为空。如果是,请返回true,否则返回false

对于引号'"的情况,如果您不允许引用在同一引号内,并且您不考虑转义语法,那么解决方案应该是相同的。< / p>

答案 1 :(得分:3)

看看this code,它解决了类似的任务。

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();
  }

}