我有一个字符串:
If ({{SQL}}.Employee.Title starts with 'Production')
and (substring of {{SQL}}.Employee.Title from '27' for '2' is not '30')
and ({{SQL}}.Employee.HireDate is greater than or equal to '2000-01-01 00:00:00.000')
then Pull {{SQL}}.Title, {{SQL}}.HireDate from Employee
从这个表达式中,我想知道圆形括号是否在Java语言中是否正确平衡。
一种方法是创建一个计数器变量,一旦找到开括号就会递增,当遇到闭括号时递减它。根据结果,我可以决定结果。
但这对于字符串like()没有帮助,即括号之间没有任何字母数字字符。
有什么方法可以确定圆括号是否平衡,并且这些括号之间应该有字母数字字符。 如果括号为空,即开括号和右括号之间没有字符,则应该抛出错误。
答案 0 :(得分:1)
您需要一个类似于下面的代码。它确实使用堆栈来跟踪打开/关闭的parantheses的数量+记住最后一个char出现的是为了跟踪空的parantheses:
String test = "{TEST}(A){";
Stack<Integer> stack = new Stack<>();
boolean lastCharIsParantheses = false;
for (char c : test.toCharArray()) {
switch (c) {
case '{':
case '(': {
stack.push(1);
lastCharIsParantheses = true;
continue;
}
case '}':
case ')':
stack.pop();
if (lastCharIsParantheses) {
throw new RuntimeException("Empty parantheses");
}
}
lastCharIsParantheses = false;
}
if (!stack.empty()) {
throw new RuntimeException("Not matching number of opened/closed parantheses");
}