Java栈的应用检测平衡符号
2015-09-27 23:29
453 查看
本文来源于啊:http://blog.csdn.net/hengjie2009/article/details/8478863
package cn.thj.data_structures; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.Stack; public class BalanceSigned { /** * @author 谭恒杰 * *栈的一个主要应用是平衡符号。 * *问题描述: 在编写代码并且编译时,难免会因为少写了一个')'和被编译器报错。也就是说,编译器会去匹配 *括号是否匹配。当你输入了一个'(',很自然编译器回去检查你是否有另一个')'符号与之匹配。如 *果所有的括号都能够成对出现,那么编译器是能够通过的。否则编译器会报错。例如字符序列“(a+b)”是匹配的, *而字符序列"(a+b]"则不是。 * * 算法描述如下: 创建一个空栈,读取字符序列直到结尾。如果字符是开放符号'(''[''{',将其入栈;如果是一个封闭 * 符号')'']''}',则当栈为空时报错。否则,将栈顶元素弹出。如果弹出的符号不是对应的开放符号, * 则报错。当字符序列结束,判断栈是否为空,为空则报错。 */ public static boolean isBalanceChar() { Stack<Character> stack = new Stack<Character>(); String path = "D:/a.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.print("illigal character" + "[]"); return false; } break; case ')': if (stack.size() == 0 || stack.pop() != '(') { System.out.print("illigal character" + "()"); return false; } break; case '}': if (stack.size() == 0 || stack.pop() != '{') { System.out.print("illigal character" + "{}"); return false; } break; case '*': if ((i < line.length() - 1 && line.charAt(i + 1) == '/') && (stack.size() < 2 || (stack.pop() != '*' || stack .pop() != '/'))) { System.out.print("illigal character" + ""); return false; } break; default: break; } } } if (stack.size() != 0) { System.out.print("error"); return false ; } } catch (Exception e) { e.printStackTrace(); } return true ; } public static void main(String[] args) { boolean flag = isBalanceChar(); if(flag){ System.out.println("是平衡符号"); }else{ System.out.println("不是平衡符号"); } } }
相关文章推荐
- Eclipse alt+/ 失效 解决
- JAVA_SE基础——33.this关键字的练习
- Java — 泛型程序设计(1)(Core Java I)
- Java Web开发2___<jsp:include>和<%@ include %>的区别
- Java 信号量 Semaphore 介绍
- MyEclipse打开记事本编写好的代码…
- JDK 源码解析 —— Java 内存模型
- java的各种使用小知识点总结。
- HashMap在java中是怎么工作的
- String类的不可变性
- java synchronized详解
- Spring Batch Hello World Example(一)
- JAVA历史
- 浅析spring IOC操作
- java连接sql server 2008
- spring配置ehcache
- jdk5.0新特性
- 最简单的Struts2项目实例
- 【总结】Java基础总结⑵
- eclipse快捷键汇总