您的位置:首页 > 其它

栈的应用--平衡符号

2014-04-01 22:16 459 查看
package com.Stack;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

public class CheckBalanced {
/**
* @author tcj
* 栈的一个主要应用:检查平衡符号
* 问题描述:在编写代码并且编译时,难免会因为少写了一个')'和被编译器报错。也就是说,编译器会去匹配
* 括号是否匹配。当你输入了一个'(',很自然编译器回去检查你是否有另一个')'符号与之匹配。如
* 果所有的括号都能够成对出现,那么编译器是能够通过的。否则编译器会报错。例如字符序列“(a+b)”是匹配的,
* 而字符序列"(a+b]"则不是。
* 算法描述如下: 创建一个空栈,读取字符序列直到结尾。如果字符是开放符号'(''[''{',将其入栈;如果是一个封闭
* 符号')'']''}',则当栈为空时报错。否则,将栈顶元素弹出。如果弹出的符号不是对应的开放符号,
* 则报错。当字符序列结束,判断栈是否为空,为空则报错。
*/
public static boolean IsBalancedChar(){
Stack<Character> stack = new Stack<Character>();
String path = "D:/testBalancedChar.txt";
File file = new File(path);

try {
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
String line = "";
while((line = br.readLine()) != null){
for(int i = 0;i < line.length();i++){
switch(line.charAt(i)){
case '[':
stack.push('[');
break;
case '(':
stack.push('(');
break;
case '{':
stack.push('{');
break;
case '/':
if(i < line.length()-1 && line.charAt(i +1) == '*'){
stack.push('/');
stack.push('*');
}
break;
case ']':
if(stack.size() == 0 || stack.pop() != '['){
System.out.println("illigal charcter" + "[]");
return false;
}
break;
case ')':
if(stack.size() == 0 || stack.pop() != '('){
System.out.println("illigal charcter" + "()");
return false;
}
break;
case '}':
if(stack.size() == 0 || stack.pop() != '{'){
System.out.println("illigal charcter" + "{}");
return false;
}
break;
case '*':
if((i < line.length()-1 && line.charAt(i+1)=='/')
&& (stack.size() < 2 || (stack.pop() != '*' || stack.pop() != '/'))){
System.out.println("illigal charcter" + "");
return false;
}
break;
default:
break;
}
}

}
if(stack.size() != 0){
System.out.println("error");
return false;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("找不到文件!");
System.exit(-1);// 终止虚拟机的运行(-1 表示非正常退出)
}catch (IOException e) {
e.printStackTrace();
System.out.println("文件读取错误!");
System.exit(-1);
}
return true;
}
public static void main(String[] args){
boolean flag = IsBalancedChar();
if(flag){
System.out.println("是平衡符号");
}else{
System.out.println("不是平衡符号");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  平衡符号