package myProgram;
import java.util.Stack;
/**
*
* @author Administrator
*/
public class MyStackUtil {
/** Creates a new instance of MyStackUtil */
public MyStackUtil() {
}
/**************************************************
*判断表达式左右括号是否匹配
*把表达式中的字符按照顺序读取,碰到左括号就压入stack中,碰到右括号就
*先判断stack是否为空,不为空就把stack中的顶层弹出,看是否和右括号匹配。
*最后根据stack中应为空,并且所有弹出的左括号都匹配
**************************************************/
public static boolean isBalanced(String expression)
{
final char LEFT_NORMAL = '(';
final char RIGHT_NORMAL = ')';
final char LEFT_SQUARE = '[';
final char RIGHT_SQUARE = ']';
final char LEFT_CURLY = '{';
final char RIGHT_CURLY = '}';
boolean failed = true;
Stack<Character> stack = new Stack();
for(int i = 0; i < expression.length(); i++)
{
char tempChar = expression.charAt(i);
switch (tempChar)
{
case LEFT_CURLY:
case LEFT_SQUARE:
case LEFT_NORMAL:
stack.push(expression.charAt(i));
break;
case RIGHT_CURLY:
if(stack.isEmpty() || stack.pop() != LEFT_CURLY)
{
failed = true;
}
break;
case RIGHT_SQUARE:
if(stack.isEmpty() || stack.pop() != LEFT_SQUARE)
{
failed = true;
}
break;
case RIGHT_NORMAL:
if(stack.isEmpty() || stack.pop() != LEFT_NORMAL)
{
failed = true;
}
break;
}
}
if(stack.isEmpty() && failed == true)
{
return true;
}
return false;
}
}