如何确定文本是否具有平衡分隔符?
我有这个问题,
编写一个函数来确定文本是否具有平衡分隔符。 有效分隔符对是(),[],{}和。 它们可能是嵌套的。 此外,确定文本分隔符’和’正确匹配。
我顺便在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; } }
看看这段代码 ,它解决了类似的任务。
import java.util.Stack; class BracketChecker { private String input; public BracketChecker(String in) { input = in; } public void check() { Stack theStack = new Stack (); 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(); } }
此问题的一般解决方案是使用堆栈。 对于每个输入字符串,从空堆栈开始:
- 遇到开放式支架时,将其推入堆叠。
- 遇到关闭括号时,从堆栈弹出并与关闭括号进行比较,以查看它们是否匹配。 如果没有,则返回
false
。 如果是,请继续。
完成字符串检查后,检查堆栈是否为空。 如果是,则返回true
,否则返回false
。
对于引号'
和'
的情况,如果你不允许引用在同一引号内,并且你不考虑转义语法,那么解决方案应该是相同的。