利用栈实现判断字符串中的括号是否都是配对的。

主要算法是依次读取字符串中的每一个字符,如果是左括号则将左括号压入栈中,如果是右括号则从栈中弹出最上面的字符,若两者不是同种括号或栈内已经没有字符就返回false,循环完成后返回true。

package com.example;

/**
* Created by XiaFF on 2014/11/18.
*
*/
public class Parentheses {
public static void main(String[] args){
String s="[()]{}{[()[]()]()}";
System.out.println(isComplete(s));
} public static boolean isComplete(String s){
Stack<String> left=new Stack<String>();
while (!s.isEmpty()){
//取字符串首字母
String character=s.substring(0,1);
//剩余的字符串
s=s.substring(1);
if(character.equals("{")||character.equals("[")||character.equals("(")){
//如果是左括号,则压入栈
left.push(character);
}else if(character.equals(")")||character.equals("]")||character.equals("}")){
//首先检查栈是否为空
if(left.isEmpty())
return false;
//弹出最后的左括号
String leftChar=left.pop();
//检查左右括号是否匹配
if(character.equals(")")){
if(!leftChar.equals("("))
return false;
}else if(character.equals("]")){
if(!leftChar.equals("["))
return false;
}else if(character.equals("}")){
if(!leftChar.equals("{"))
return false;
}
}
}
//此时栈中不应该再有左括号
return left.isEmpty();
}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

[Java]利用栈判断括号是否完整配对的更多相关文章

  1. 利用栈实现括号匹配(python语言)

    原理: 右括号总是与最近的左括号匹配 --- 栈的后进先出 从左往右遍历字符串,遇到左括号就入栈,遇到右括号时,就出栈一个元素与其配对 当栈为空时,遇到右括号,则此右括号无与之匹配的左括号 当最终右括 ...

  2. Python 用栈判断括号匹配

    #!/usr/bin/python # -*- coding: UTF-8 -*- from pythonds.basic.stack import Stack def parChecker(symb ...

  3. java实现的判断括号是否成对的代码,()[]{}都可以

    本来想找找现成的,去,都写的好复杂.自己写一个吧.挺有成就感.哈哈 package com.test.jiexi; import java.util.Stack; public class Check ...

  4. 利用栈实现算术表达式求值(Java语言描述)

    利用栈实现算术表达式求值(Java语言描述) 算术表达式求值是栈的典型应用,自己写栈,实现Java栈算术表达式求值,涉及栈,编译原理方面的知识.声明:部分代码参考自茫茫大海的专栏. 链栈的实现: pa ...

  5. 利用栈实现字符串中三种括号的匹配问题c++语言实现

    编写一个算法,检查一个程序中的花括号,方括号和圆括号是否配对,若能够全部配对则返回1,否则返回0. Head.h: #ifndef HEAD_H_INCLUDED #define HEAD_H_INC ...

  6. java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值

    1.java利用反射机制判断对象的属性是否为空: Map<String,String> validateMap = new LinkedHashMap<String, String& ...

  7. Valid Parentheses有效括号匹配。利用栈。

    问题描述:给定一个字符串,其中只包含字符‘{’,    '}',    '[',    ']',   '(',    ')'确定如果输入字符串是有效的.括号必须以正确的顺序排列,“()”和“()[]{ ...

  8. Java 技术栈

    JAVA是一个面向对象的编程语言,由SUN公司的程序员所开发.它不仅吸收了C++的各种优点,而且还撇弃了C++中难以理解的概念,如多继承.指针等:因此JAVA语言具有功能强大且简单易用两个特征, JA ...

  9. Java 技术栈中间件优雅停机方案设计与实现全景图

    欢迎关注公众号:bin的技术小屋,阅读公众号原文 本系列 Netty 源码解析文章基于 4.1.56.Final 版本 本文概要 在上篇文章 我为 Netty 贡献源码 | 且看 Netty 如何应对 ...

随机推荐

  1. iOS极光推送的基本使用

    昨天花了一下午的时间研究了下极光推送,也前也是没做过,不知道从何下手!才开始的时候一看官方的SDK感觉好难,不过经过一系列的捣鼓之后,手机收到了推送信息,感觉其实并没有那么难! 1.配置开发证书(得有 ...

  2. ssm+easyUI datagrid 不能显示后台controller层返回的json数据

    后台打印查询出来的数据: {"total":29,"rows":[{"department_id":0,"department_n ...

  3. split 函数自己实现

    要求自己实现split函数 def mySplit(str,delimiter): result = [] start = 0 pos = str.find(delimiter, start) whi ...

  4. Invalid signature file digest for Manifest main attributes

    Solving a Spark error: Invalid signature file digest for Manifest main attributes When using spark-s ...

  5. how to install git 1.8 rpm

    git版本在低于1.8之前,对于私有项目会出现401的pull失败错误,只能通过升级git版本来解决 It appears that git18 is no longer available from ...

  6. verilog 随笔

    不是说你在代码里定义一个reg型变量,综合器就会综合处一个寄存器来,case必须在always块里,always里面的被赋值变量必须是reg型,这是语法的规定,只能遵守.写代码的时候不要加入触发器(不 ...

  7. mac下通过xcodebuild使用oclint

    step1 :下载oclint并安装 下载地址: http://oclint.org/downloads.html 选择mac os x或者darwin的包,下载到本地. 文件夹类似以下: oclin ...

  8. xcode xib 加载 、注意点

    加载xib2中方式 NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"xib名称" owner:nil options: ...

  9. 1.一步一步学c#(一):.NET体系结构(知识点)

    一.C#和.NET关系     1. 首先C#语言有两个很重要的方面:第一它是为了Microsoft的.NET Framework的结合而设计的,其次它是一种为问题而设计解决问题的方法的语言,它有很多 ...

  10. 队列的实现 -- 数据结构与算法的javascript描述 第五章

    队列也是列表的一种,有不同于列表的规则. 先进先出 入队方法 出队方法 可以找到队首 可以找到队尾 可以查看队列有多长 可以查看队列是否为空 这是一个基本的需求,围绕他来实现,当然我们可以自己扩展列表 ...