栈的应用--平衡符号
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("不是平衡符号"); } } }
相关文章推荐
- 栈的应用:平衡符号问题
- 栈的应用 平衡符号 后缀表达式 中缀到后缀的转换
- 栈的应用之平衡符号
- 栈的应用 — 平衡符号
- 栈的应用---平衡符号的检测
- 栈的应用 - 符号平衡问题
- 栈的应用---平衡符号
- python数据结构与算法 6栈的应用之符号平衡(通用)
- 栈的简单应用1-平衡符号
- 栈的应用之检测平衡符号
- javascript栈的应用之符号平衡
- 栈的应用之平衡符号
- 栈的应用实例——平衡符号
- 堆栈的应用(1) 平衡符号 C++实现
- javascript数据结构中栈的应用之符号平衡问题
- 平衡符号(栈应用一)
- 栈的应用—平衡符号
- 栈应用——平衡符号
- 重学数据结构005——栈的应用之平衡符号
- 堆栈的应用(1) 平衡符号 C++实现