http://blog.csdn.net/wy4649/article/details/11725073
package com.huawei.job;
import java.util.ArrayList;
import java.util.Scanner;
public class IfJudge {
public static void main(String[] args) {
StringBuffer input = new StringBuffer();
Scanner in = new Scanner(System.in);
input.append(in.nextLine());
System.out.println(new IfJudge().judge(input));
}
//判断if语法:输入if语句没有嵌套,只需要判断括号是否使用正确
private StringBufferjudge(StringBuffer sb) {
//保存答案
StringBuffer answ = new StringBuffer();
int leftMax = 0; //返回左边括号数
int rightMax = 0; //返回右边括号数
int left = 0; //暂存左边括号
int right = 0; //暂存右边括号
//新建一个栈
Stack stack = new Stack();
//把括号入栈
boolean flag = true; //判断是否正在输入字符或字符串
for(int i = 0; i < sb.length(); i++) {
if(sb.charAt(i) == '\'' || sb.charAt(i) == '\"') {
if(flag)
flag = false;
else
flag = true;
continue;
}
//不是字符串或字符中的括号才允许入栈
if(flag)
if(sb.charAt(i) == '(' || sb.charAt(i) == ')')
stack.push(sb.charAt(i));
}
char tem;
char outer = stack.pop(); //弹出第一个括号
if(outer != ')') //第一个括号不是右括号则语法错误
return sb.append("WRONG");
right++;
rightMax++;
//弹栈并判断
while((tem = stack.pop()) != 0) { //栈中还有括号则循环
if(tem == '(') { //弹出左括号
left++;
leftMax++;
}
else { //弹出右括号
right++;
rightMax++;
}
if(right > 0 && left > 0) { //弹出了左括号和右括号开始判断
if(right > left) { //正常情况下,右括号始终会大于左括号,直到最外层括号弹出
right -= left;
left = 0;
}
if(right == left) { //正确情况下,左右括号数相同,说明最外层括号已弹出
if(stack.pop() == 0) { //如果括号已全部弹出,说明语法正确
return answ.append("RIGHT" + leftMax + " " + rightMax);
}
else //括号未弹出完毕,语法错误
return answ.append("WRONG");
}
}
}
//未能正确弹出,则为语法错误
return answ.append("WRONG");
}
}
class Stack {
//栈空间为一个字符型的链表
ArrayList<Character> chs = new ArrayList<Character>();
//入栈
public void push(char c) {
chs.add(c);
}
//出栈
public char pop() {
if(chs.size() > 0) {
char c = chs.get(chs.size() - 1);
chs.remove(chs.size() - 1);
return c;
}
return 0;
}
}