我有一个方法应该使用 java.lang.String 来验证字符串中准确的左括号和右括号。此方法将用于解析数学表达式,因此括号的平衡很重要。由于某种原因,它在这两次运行中都返回 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("");
如果您使用,则为您提供第一个 char = ""java 1.7
或更少,所以你将退出循环,因为堆栈是空的......
注意:这已更改为java 1.8
java 1.7 和 1.8 之间的区别 https://stackoverflow.com/questions/22718744/why-in-java-8-split-sometimes-removes-empty-strings-at-start-of-result-array
改成:
char[] tokens = str.toCharArray();
不过,我想您需要考虑这样一个事实:第一个字符之前可能有字符(
然后你可能还有其他字符(
and )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)