java判断语句是否合法_栈的应用1——判断java语句是否合法

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();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值