java版|java版 利用栈实现括号匹配
package MatchKuoHao;
public class StackX {
//底层采用数据来存储数据,
private char[] stackArray;
private int maxSize;
private int top;
public StackX(int max){
this.maxSize = max;
stackArray = new char[maxSize];
top = -1;
}
//存储数据
public void push(char ch){
stackArray[++top] = ch;
}
//取出数据
public char pop(){
return stackArray[top--];
}
//查看数据
public char peek(){
return stackArray[top];
}
//查看当前是否为空栈
public boolean isEmpty(){
return top == -1;
}
}
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
package MatchKuoHao;
/*
* 括号匹配,利用栈来实现
*/
public class BracketChecker {
private String input;
public BracketChecker(String input){
this.input = input;
}
public void check(){
int stackSize = input.length();
StackX theStack = new StackX(stackSize);
//a{b(c[j])}
/*
* 目前,如果读到{}()[]就放到栈里,进行check
*/
for(int i=0;
ichar ch = input.charAt(i);
switch(ch){
case '{':
case '(':
case '[':
theStack.push(ch);
//只要是这三个括号,就放入栈里
break;
case '}':
case ')':
case ']':
if(!theStack.isEmpty()){
char chx = theStack.pop();
if((ch=='}'&& chx != '{') || (ch==']'&& chx != '[')||(ch==')'&& chx != '('))
System.out.println("error:"+ch+"at "+i);
}else{
//走这个分支,说明,栈里,没有内容了,
System.out.println("error:"+ch+"at:left"+i);
//栈里,已经没有匹配括号了
//但是,又读到括号了,说明,要么前面少了,要么就是后面多了
}
break;
default:
break;
}
}
//当已经读完字符串后,检测一下栈,看看,里面是否还有元素,有的话,说明,左边,缺少
if(!theStack.isEmpty())
System.out.println("error:"+"right 缺少匹配括号哦");
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
【java版|java版 利用栈实现括号匹配】package MatchKuoHao;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BracketCheckTest {
public static void main(String[] args) throws IOException {
String input;
while(true){
System.out.println("Enter a String containing delimiters:");
System.out.flush();
input = getString();
if(input.equals("")) break;
//”“输入回车就可以结束循环了
BracketChecker theChecker = new BracketChecker(input);
theChecker.check();
}
}
//获得,控制台的输入的字符串
public static String getString() throws IOException{
//inputStreamReader输入流的读取器,也就是控制台的
InputStreamReader isr = new InputStreamReader(System.in);
//InputStreamReader 还不是很好,需要再包装一次哦
//BufferedReader 带缓存的读取器哦
BufferedReader bReader = new BufferedReader(isr);
String s = bReader.readLine();
return s;
}
}
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- MongoDB,Wondows下免安装版|MongoDB,Wondows下免安装版 (简化版操作)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- 在线版的迅捷思维导图怎么操作()
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- 「按键精灵安卓版」关于全分辨率脚本的一些理解(非游戏app)
- Java|Java基础——数组