无法正确验证Java方法中的平衡括号解析

我有一种方法应该使用Java来验证字符串中正确的打开和关闭括号。此方法将用于解析数学表达式,因此平衡括号非常重要。由于某些原因,在这两个运行中它都返回false:

System.out.println(parChecker("(()"));  // returns false :-)

System.out.println(parChecker("((()))")); // returns false :-( WHY??

这是使用堆栈来解决问题的方法。这里有些错误,因为对于一组均衡的括号,它也返回false。有什么问题?先感谢您。

public static boolean parChecker(String str) {

String[] tokens = str.split("");

int size = tokens.length;

Stack theStack = new Stack(size);

int index = 0;

boolean balanced = true;

while ((index < size) && balanced) {

String symbol = tokens[index];

if (symbol.equals("(")) {

theStack.push(symbol);

} else {

if (theStack.isEmpty()) {

balanced = false;

} else {

theStack.pop();

}

}

index++;

}

if (balanced && theStack.isEmpty()) {

return true;

} else {

return false;

}

}

这是我正在使用的堆栈类:

public class Stack {

private Object [] stack;

private int maxSize = 0;

private int top;

public Stack(int size){

maxSize = size;

stack = new Object[maxSize];

top = -1;

}

public void push(Object obj){

top++;

stack[top] = obj;

}

public Object pop(){

return stack[top--];

}

public Object peek(){

return stack[top];

}

public boolean isEmpty(){

return (top == -1);

}

public boolean isFull(){

return (top == maxSize -1);

}

}

回答:

眼前的问题是

String[] tokens = str.split("");

如果使用java 1.7或更少,则为您提供第一个char =“” ,因此由于堆栈为空,您将退出循环…

注意:这在Java 1.7和1.8之间的拆分差异中已更改java 1.8

改成:

char[] tokens = str.toCharArray();

但是我想您需要考虑这样一个事实:在您的第一个字符之前(可能有字符,然后您可能还有其他字符,(并且)

以上是 无法正确验证Java方法中的平衡括号解析 的全部内容, 来源链接: utcz.com/qa/405561.html

回到顶部