import java.util.Scanner;
public class Example3_1 {
/**
* 栈的应用实例
* 判断java语句中分隔符是否匹配
*
* */
private final int LEFT = 0;
private final int RIGHT = 1;
private final int OTHER = 2;
//判断分割符的类型,有三种 左、右、非法
public int verifyFlag(String str) {
if("(".equals(str) || "[".equals(str) || "{".equals(str) || "/*".equals(str)){
return LEFT; //左分隔符
}
else if(")".equals(str) || "]".equals(str) || "}".equals(str) || "*/".equals(str)) {
return RIGHT; //右分隔符
}
else {
return OTHER;
}
}
//匹配 分隔符str1和str2是否匹配
public boolean matches(String str1, String str2) {
if(("(".equals(str1) && ")".equals(str2)) ||
("[".equals(str1) && "]".equals(str2)) ||
("{".equals(str1) && "}".equals(str2)) ||
("/*".equals(str1) && "*/".equals(str2)) ) {
return true;
}
else {
return false;
}
}
public boolean isLegal(String str) throws Exception {
if(! "".equals(str) && str != null ) {
SqStack S = new SqStack(100); //新建空间为100的顺序栈
int length = str.length();
for(int i = 0; i < length; i++ ) {
char c = str.charAt(i);
String t = String.valueOf(c);
if( i != length) {
if(('/' == c && '*' == str.charAt(i + 1)) || ('*' == c &&
'/' == str.charAt(i + 1))) { //是分隔符/*或者*/
t = t.concat(String.valueOf(str.charAt(i + 1)));
++i;
}
}
if( LEFT == verifyFlag(t)) { //为左分隔符,压入栈
S.push(t);
}
else if( RIGHT == verifyFlag(t)) {
if(S.isEmpty() || !matches(S.pop().toString(), t)){
throw new Exception("错误:语句不合法");
}
}
} // 结束循环
if(!S.isEmpty()) {
throw new Exception("错误:语句不合法");
}
return true;
}
else {
throw new Exception("错误:语句为空");
}
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Example3_1 e = new Example3_1();
System.out.print("请输入语句");
Scanner sc = new Scanner(System.in);
if(e.isLegal(sc.nextLine())){
System.out.println("java语句合法");
}
else {
System.out.println("java语句不合法");
}
sc.close();
}
}