package stack;
public class BracketCheckerApp {
class StackX {
private int top;
private int size;
private char[] stackArray;
public StackX( int sz) {
size = sz;
top = -1;
stackArray = new char[sz];
}
public void push( char ch) {
stackArray[++top] = ch;
}
public char pop() {
return stackArray[top--];
}
public boolean isEmpty() {
return top == -1;
}
}
class BracketChecker {
private String input;
public BracketChecker(String in) {
input = in;
}
public void check() {
int len = input.length();
StackX stack = new StackX(len);
for ( int i = 0; i < len; i++) {
char ch = input.charAt(i);
switch (ch) {
case '{':
case '[':
case '(':
stack.push(ch);
break;
case ']':
case '}':
case ')':
if (!stack.isEmpty()) {
char chx = stack.pop();
if ((chx == ']' && ch != '[')
|| (chx == '}' && ch != '{')
|| (chx == ')' && ch != '(')) {
System.out.print( "error");
}
} else {
System.out.println( "error2");
}
break;
default:
break;
}
}
if(!stack.isEmpty()){
System.out.println( "failure");
return;
}
System.out.println( "success!");
}
}
public static void main(String[] args){
BracketCheckerApp app = new BracketCheckerApp();
BracketChecker bracket = app. new BracketChecker( "[{}()zaho]");
bracket.check();
}
}
public class BracketCheckerApp {
class StackX {
private int top;
private int size;
private char[] stackArray;
public StackX( int sz) {
size = sz;
top = -1;
stackArray = new char[sz];
}
public void push( char ch) {
stackArray[++top] = ch;
}
public char pop() {
return stackArray[top--];
}
public boolean isEmpty() {
return top == -1;
}
}
class BracketChecker {
private String input;
public BracketChecker(String in) {
input = in;
}
public void check() {
int len = input.length();
StackX stack = new StackX(len);
for ( int i = 0; i < len; i++) {
char ch = input.charAt(i);
switch (ch) {
case '{':
case '[':
case '(':
stack.push(ch);
break;
case ']':
case '}':
case ')':
if (!stack.isEmpty()) {
char chx = stack.pop();
if ((chx == ']' && ch != '[')
|| (chx == '}' && ch != '{')
|| (chx == ')' && ch != '(')) {
System.out.print( "error");
}
} else {
System.out.println( "error2");
}
break;
default:
break;
}
}
if(!stack.isEmpty()){
System.out.println( "failure");
return;
}
System.out.println( "success!");
}
}
public static void main(String[] args){
BracketCheckerApp app = new BracketCheckerApp();
BracketChecker bracket = app. new BracketChecker( "[{}()zaho]");
bracket.check();
}
}
原理:第一步将要匹配的目标字符串解析成字符数组,在循环体里,通过分隔符,设置入栈、出栈的条件。最后,判定栈是否为空,判定是否匹配成功。因为分隔符匹配,总是成对出现的,如果不为空,标示发生错误。
本文转自 randy_shandong 51CTO博客,原文链接:http://blog.51cto.com/dba10g/226610,如需转载请自行联系原作者