* 栈应用之平衡字符
*
* 栈的应用:检查每件事情是否能成对出现
*
*
* 初学者在编写代码并且编译时,难免会因为少写了一个')'和被编译器报错。也就是说,编译器会去匹配括号是否匹配。
* 当你输入了一个'(',很自然编译器回去检查你是否有另一个')'符号与之匹配。如果所有的括号都能够成对出现,那么编译器是能够通过的。
* 否则编译器会报错。例如字符序列“(a+b)”是匹配的,而字符序列"(a+b]"则不是。
* 在检测括号匹配的算法中使用到了栈,算法描述如下:创建一个空栈,读取字符序列直到结尾。
* 如果字符是开放符号'(''[''{',将其入栈;如果是一个封闭符号')'']''}',则当栈为空时报错。
* 否则,将栈顶元素弹出。如果弹出的符号不是对应的开放符号,则报错。当字符序列结束,判断栈是否为空,为空则报错。
package com.dt.stactt;
import java.util.Stack;
/**
* 栈应用之平衡字符
*
* 栈的应用:检查每件事情是否能成对出现
*
*
* 初学者在编写代码并且编译时,难免会因为少写了一个')'和被编译器报错。也就是说,编译器会去匹配括号是否匹配。
* 当你输入了一个'(',很自然编译器回去检查你是否有另一个')'符号与之匹配。如果所有的括号都能够成对出现,那么编译器是能够通过的。
* 否则编译器会报错。例如字符序列“(a+b)”是匹配的,而字符序列"(a+b]"则不是。
* 在检测括号匹配的算法中使用到了栈,算法描述如下:创建一个空栈,读取字符序列直到结尾。
* 如果字符是开放符号'(''[''{',将其入栈;如果是一个封闭符号')'']''}',则当栈为空时报错。
* 否则,将栈顶元素弹出。如果弹出的符号不是对应的开放符号,则报错。当字符序列结束,判断栈是否为空,为空则报错。
*
*
* @author kuwo
*
*/
public class BalanceSigned {
public static void checkChar(String str) {
boolean error = false;
Stack st = new Stack();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
switch (c) {
case '(':
case '{':
case '[':
st.push(c);
break;
case ')':
case '}':
case ']':
if(st.isEmpty()){
System.out.println("Error,"+ c +" is no match.");
}else{
char cc = (char) st.pop();
if(c == ')' && cc != '(' || c == '{' && cc!= '}' || c == '[' && cc != ']'){
System.out.println("Error,"+ cc +" is no match. : " + c);
}
}
default:
break;
}
}
if(!st.isEmpty()){
// 如果栈不为空,那么说明,栈在匹配的时候出现了错误
System.out.println("Error,sign is remaining.");
}else{
// 当栈为空的时候,那么说明,栈中所有的数据都匹配成功了
System.out.println("match success!");
}
}
public static void main(String[] args) {
String str = "Java(/* */,(),[],{})";
checkChar(str);
}
}