检测某一文件括号是否匹配

/*
*检测给定文件中大小括号是否匹配
*/
public class CheckBracesByStack
{

	public static void main(String[] args) {
		File file = new File("G:\\CopyFolder.java");
		try {
			CheckBracesByStack.checkBracesByStack(file);
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void checkBracesByStack(File file) throws Exception {
		//检查文件是否存在
		if(!file.exists()) {
			System.out.println("文件不存在");
			System.exit(1);
		}
		FileInputStream fis = null;
		//模拟一个栈
		byte[] stack = new byte[1024];
		int length = 0;
		//模拟的栈的指针
		int index = 0;
		byte[] bs = new byte[1024];
		try {
			fis = new FileInputStream(file);
			//当文件未达到结尾时,循环遍历
			while((length=fis.read(bs)) != -1) {
				for(int i=0; i<length; i++) {
					switch(bs[i]) {
					//若是左大括号{,则进栈 
					//{=123
					case 123 :
						stack[index] = bs[i];
						index ++;
						continue;
					//若是有大右括号},栈指针向下移动一格,检查栈顶元素是否为左大括号{。
				    //若是,出栈,并继续遍历 ;若不是,则大括号不匹配,抛出异常 
					//}=125
					case 125 :
						if(stack[index-1] != 123) {
							throw new Exception("括号不匹配!");
						}else {
							stack[index-1] = 0;
							index --;
							continue;
						}
					//若是左小括号{,则进栈 (=40
					case 40 :
						stack[index] = bs[i];
						index ++;
						continue;
					//若是有小右括号},栈指针向下移动一格,检查栈顶元素是否为左小括号(。
				    //若是,出栈,并继续遍历 ;若不是,则括号不匹配,抛出异常  
				    //  )=41
					case 41 :
						if(stack[index-1] != 40) {
							System.out.println("index:" + index);
							throw new Exception("括号不匹配!");
						}else {
							stack[index-1] = 0;
							index --;
							continue;
						}
					}
				}
			}
			//文件遍历完成,若栈不为空,则括号不匹配
			if(index != 0) {
				throw new Exception("括号不匹配!");
			}
		}catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			if(fis != null) {
				fis.close();
			}
		}
	}
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值