stack的理解就不多哔哔了,网上很多优秀的文章。
第一步,封装stack 类
public class Stack {
private int size;
private int top;
private char[] stackArr;
public Stack(int size) {
stackArr = new char[size];
top = -1;
this.size = size;
}
public void push(char elem) {
stackArr[++top] = elem;
}
public char pop() {
return stackArr[top--];
}
// 查看
public char peek() {
return stackArr[top];
}
// 判空
public boolean isEmpty() {
return top == -1;
}
// 判满
public boolean isFull() {
return top == (size - 1);
}
}
// 测试类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BrecketChecker {
private String input;
public BrecketChecker(String in) {
this.input = in;
}
public void check() {
int strLength = input.length();
Stack stack = new Stack(strLength);
for (int i = 0; i < strLength; i++) {
char ch = input.charAt(i);
switch (ch) {
case '{':
case '[':
case '(':
stack.push(ch);
break;
case '}':
case ']':
case ')':
if (!stack.isEmpty()) {
char chx = stack.peek();
if ((chx == '{' & ch == '}') || (chx == '(' & ch == ')')
|| (chx == '[' & ch == ']')) {
System.out.println("匹配完成!字符:" + ch + ",下标:" + i);
stack.pop();
}
} else {
System.out.println("匹配出错!字符:" + ch + ",下标:" + i);
}
default:
break;
}
}
if (!stack.isEmpty()) {
// 匹配结束时如果栈中还有元素,证明右分隔符缺失
System.out.println("有括号没有关闭!");
}
}
public static void main(String[] args) {
System.out.println("输入需要检测的字符串:");
String str = getString();
BrecketChecker checker = new BrecketChecker(str);
checker.check();
}
public static String getString() {
String str = "";
try {
InputStreamReader reader = new InputStreamReader(System.in);
BufferedReader bReader = new BufferedReader(reader);
str = bReader.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
}
第二部实验/测试
参考文章