A+{[B*(C+D)-E*5*(F/(12-G))*(H+(I-5)*3)]} 编码验证括号是否匹配
解决方案 »
- ajax提交之后 action返回值的问题
- 附件定时备份
- jsp web 程序中 .do 文件怎么实现的?
- JBuilder2006重新开机无法启动,有谁知道这是怎么回事?
- 使用http://127.0.0.1:8080/http/send.jsp?account=test&content=123,这样的方式大量多次传值提交,如果让页面的传递接受后立即失效
- 时间转换问题,知道的帮忙下
- 求:基于Struts框架下的JSP最好的分页代码!Orz
- 各位大侠!!赶紧帮帮我啊,我要疯了!!!!!!!!
- SqlServer驱动程序在哪里下啊?
- 数据问题,急!
- 为什么在火狐里 margin-bottom不好使呢
- war包发布异常(Sun JDK换为IBM JDK)
public static void main(String[] args) throws IOException {
check("A+{[B*(C+D)-E*5*(F/(12-G))*(H+(I-5)*3)]}");
// check("(a+b)+c");
}
static void check(String tar){
Stack<String> stack = new Stack<String>();
for(int i=0;i<tar.length();i++){
String temp = Character.toString(tar.charAt(i));
if(temp.matches("[\\{\\{\\(]")){
stack.push(temp);
}else if(temp.equals("}")){
if(stack.isEmpty() || !stack.pop().equals("{")){
System.err.println("不匹配的}在第"+(i+1)+"位");
return;
}
}else if(temp.equals("]")){
if(stack.isEmpty() || !stack.pop().equals("[")){
System.err.println("不匹配的]在第"+(i+1)+"位");
return;
}
}else if(temp.equals(")")){
if(stack.isEmpty() || !stack.pop().equals("(")){
System.err.println("不匹配的)在第"+(i+1)+"位");
return;
}
}
}
if(stack.size()>0){
System.err.println("不匹配");
}
}
打错了.应该是 if(temp.matches("[\\{\\[\\(]")){
刚发现的。sorry
public static void main(String[] args) throws IOException {
check("A+{[B*(C+D)-E*5*(F/(12-G))*(H+(I-5)*3)]}");
}
static void check(String tar){
//一般讲栈的算法里面的例题就是他.读到左括号就入栈,读到右括号就出栈判断是否正确的闭合括号
//最后栈内为空表示正确.不空就表明还有未配对的左括号
Stack<String> stack = new Stack<String>();
for(int i=0;i<tar.length();i++){
String temp = Character.toString(tar.charAt(i));
if(temp.matches("[\\{\\[\\(]")){
stack.push(temp);
}else if(temp.equals("}")){
if(stack.isEmpty() || !stack.pop().equals("{")){
System.err.println("不匹配的}在第"+(i+1)+"位");
return;
}
}else if(temp.equals("]")){
if(stack.isEmpty() || !stack.pop().equals("[")){
System.err.println("不匹配的]在第"+(i+1)+"位");
return;
}
}else if(temp.equals(")")){
if(stack.isEmpty() || !stack.pop().equals("(")){
System.err.println("不匹配的)在第"+(i+1)+"位");
return;
}
}
}
if(stack.size()>0){
System.err.println("不匹配");
}else{
System.out.println("正确的");
}
char temp;
char[] lefts = {'{','[','('};
char[] rights = {'}',']',')'};
char charStrs[] = str.toCharArray();
String strUse ="";
for(int i =0; i<charStrs.length;i++){
for(int j=0;j<3;j++)
if(charStrs[i]==lefts[j] || charStrs[i]==rights[j])
strUse+=charStrs[i];
}
System.out.println(strUse);
Stack s = new Stack();
for(int k=0;k<strUse.length();k++){
for(int m=0;m<3;m++){
if(strUse.charAt(k)==lefts[m]){
s.push(strUse.charAt(k));
System.out.println("===+++");
}
if(!s.isEmpty()){
if((char)(Character)s.peek()=='{' && strUse.charAt(k)=='}')
s.pop();
else
if((char)(Character)s.peek()=='(' && strUse.charAt(k)==')')
s.pop();
else
if((char)(Character)s.peek()=='[' && strUse.charAt(k)==']')
s.pop();
System.out.println("===");
}
}
}
System.out.println(s.isEmpty());
看看编译器的算法,LRLL,忘记啥名字了,呵呵