您的位置:首页 > 编程语言 > Java开发

【第4节】Java代码实现栈--小例子--分隔符匹配

2015-10-10 20:07 435 查看
package com.java.chapterFour;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BracktStackApp {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String input;
while(true){
System.out.println("请出入遗传字符串");
System.out.flush();
input =getString();
if(input.equals(""))
break;
BreaketChecker theChecker=new BreaketChecker(input);
theChecker.check();
}
}
public static  String getString() throws IOException{
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
String s=br.readLine();
return s;
}
}
class BracktStack{
private int maxSize;
private char[] stackArray;
private int top;

BracktStack(int n){
stackArray=new char
;
maxSize=n;
top=-1;
}
public void push(char j){
stackArray[++top]=j;
}
public char pop(){
return stackArray[top--];
}
public char peek(){
return stackArray[top];
}
public boolean isEmpty(){
return (top==-1);
}
public boolean isFull(){
return (top==maxSize-1);
}
}

class BreaketChecker{
private String input;

public BreaketChecker(String in){
input=in;
}
public void check(){
int stackSize=input.length();
BracktStack theStack=new BracktStack(stackSize);
for (int i = 0; i < input.length(); i++) {
char 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+1)+"  括号不匹配");
else    if( (ch=='}'&&chx=='{')  ||
(ch==']'&&chx=='[') ||
(ch==')'&&chx=='(') )
System.out.println("匹配成功");
}else
System.out.println("Error: "+ch+" at "+(i+1)+"  栈是空的");
break;
default: break;
}//end switch
}//end for
if(!theStack.isEmpty())
System.out.println("Rrror: 没有正确的分解符,已经有前括号,没有后括号");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: