如何确定文本具有平衡分隔符?(How to determine if a text has bala

2019-09-20 01:41发布

我有这个问题,

编写一个函数,以确定是否有文字分隔符平衡。 有效分隔符的情况对是(),[],{}和<>。 它们可以被嵌套。 此外,确定文字分隔符“和”正确地匹配。

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

Answer 1:

看看这个代码 ,它解决了类似的任务。

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

}


Answer 2:

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

  • 当遇到一个开放的支架,将其推入堆栈。
  • 当遇到一个闭括号,从栈中弹出并与接近支架比较,看它们是否匹配对。 如果不是,返回false 。 如果是,继续。

当您完成通过串去,请检查堆栈是否为空。 如果是的话,返回true ,否则返回false

对于行情的情况下, '" ,如果你不允许报价是相同的报价里面,你不考虑逃跑语法,那么解决方案应该是相同的。



文章来源: How to determine if a text has balanced delimiters?