vb.net 对字符串中的括号匹配进行判断,容许嵌套
' 括号检查
' 括号共有四种: 1(英文圆括号),2(中文圆括号),3[方括号],4{花括号}
' 要左右匹配(可以嵌套)
Private Shared Function isBracketsOK(strInput As String) As Boolean
' 四种括号,左右各一个,共8个
Dim brace1_open As Char = "("
Dim brace1_close As Char = ")"
Dim brace2_open As Char = "("
Dim brace2_close As Char = ")"
Dim brace3_open As Char = "["
Dim brace3_close As Char = "]"
Dim brace4_open As Char = "{"
Dim brace4_close As Char = "}"
' 四个左括号的列表
Dim list_braceOpen As List(Of Char) = New List(Of Char)
list_braceOpen.Add(brace1_open)
list_braceOpen.Add(brace2_open)
list_braceOpen.Add(brace3_open)
list_braceOpen.Add(brace4_open)
' 四个右括号的列表
Dim list_braceClose As List(Of Char) = New List(Of Char)
list_braceClose.Add(brace1_close)
list_braceClose.Add(brace2_close)
list_braceClose.Add(brace3_close)
list_braceClose.Add(brace4_close)
' 左括号 和 右括号 的一一对应关系,用字典表示
Dim dic_braces As Dictionary(Of Char, Char) = New Dictionary(Of Char, Char)
dic_braces.Add(brace1_open, brace1_close)
dic_braces.Add(brace2_open, brace2_close)
dic_braces.Add(brace3_open, brace3_close)
dic_braces.Add(brace4_open, brace4_close)
' 右括号 组成的 堆栈(先进后出)
Dim stack_close As Stack(Of Char) = New Stack(Of Char)
Dim CharArr As Char() = strInput.ToCharArray() ' 将字符串转为 字符数组
For Each _char In CharArr ' 对于每个字符
If list_braceOpen.Contains(_char) Then ' 如果这是个 左括号
stack_close.Push(dic_braces(_char)) ' 在 堆栈中 加入相应的 右括号
ElseIf list_braceClose.Contains(_char) Then ' 如果这是个 右括号
If stack_close.Count = 0 Then ' 如果 堆栈 已经空了(不能pop了)
Return False ' 报错
EndIf
Dim charPop AsChar = stack_close.Pop() ' 从 堆栈中取得一个右括号
If _char <> charPop Then ' 如果 从堆栈中取得的右括号 和 这个右括号 不同
Return False ' 报错
End If
End If
Next
If stack_close.Count > 0 Then ' 如果堆栈中还有 右括号
Return False
End If
Return True
End Function
vb.net 对字符串中的括号匹配进行判断,容许嵌套的更多相关文章
- 华为OJ:2199 推断输入字符串中的括号匹配
依据不同的括号有个计数器.在遍历时.当计数器小于0则返回false或者当遍历完后,计数器仍旧不为零,也返回false. import java.util.Scanner; public class b ...
- Excel-判断一个文本字符串中是否包含数字! 判断一个文本字符串是否是纯汉字!
0.判断一个文本字符串中是否包含数字!/判断一个文本字符串是否是纯汉字! 公式=IF(LENB(A1)=2*LEN(A1),"都是汉字","含有非汉字字符") ...
- python栈--字符串反转,括号匹配
栈的实现: # 定义一个栈类 class Stack(): # 栈的初始化 def __init__(self): self.items = [] # 判断栈是否为空,为空返回True def isE ...
- php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
$str="你好<我>(爱)[北京]{天安门}"; echo f1($str); //返回你好 echo f2($str); //返回我 echo f3($str); ...
- js正则实现从一段复杂html代码字符串中匹配并处理特定信息
js正则实现从一段复杂html代码字符串中匹配并处理特定信息 问题: 现在要从一个复杂的html代码字符串(包含各种html标签,数字.中文等信息)中找到某一段特别的信息(被一对“|”包裹着),并对他 ...
- java:数据结构(二)栈的应用(括号匹配)
一.什么是括号匹配: 括号匹配就是利用计算机辨别表达式里面的括号是否书写成功 例如: {()((a)) }这就是一个正确 (()() 这就是一个错误的 二.括号匹配的算法: 众所周知,括号分为花括 ...
- DP_括号匹配序列问题
括号匹配问题 简单括号匹配问题是给出字符串,判断字符串中的括号是否匹配,此类问题核心解决方案就是利用栈的后进先出的特性,从左到右依次遍历字符串,遇左括号进栈,遇右括号将其与栈顶元素配对,若能配对,则栈 ...
- 华为笔试——C++括号匹配
题目:括号匹配 题目来源:https://blog.csdn.net/lizi_stdio/article/details/76618908 题目介绍:输入一个字符串,里面可能包含“()”.“ [ ...
- JS中删除字符串中的空格
问题描述: 在进行字符串操作时,由于字符串中存在较多的空格,因此需要考虑取消字符串中的空格 问题解决: (1)删除字符串中的前导空格(字符串的前面的空格): 注意:这里使用 ...
随机推荐
- oracle 自增序列实现 可作为主键
好记性不如烂笔头 记录如何建立oracle 自增序列 表结构 create table TAB_USERINPUT ( RID VARCHAR2(20) not null, VARID VARCHAR ...
- Linux 目录简介
这里以Centos7为例: 使用tree命令查看/目录结构如下: 下面我们主要探讨如下主要目录: /:根目录不必多说,文件系统的最顶端,存放系统所有目录. bin:该目录主要存放系统运行所需要的重要命 ...
- idea中Entity实体中报错:cannot resolve column/table/...解决办法。
idea中Entity实体中报错:cannot resolve column/table/...解决办法. 若idea中Entity实体中报错: cannot resolve column.... c ...
- vue3修改link标签默认icon无效问题
vue3修改link中标签默认icon,vue3初次使用的时候不好好阅读配置难免会遇到一些坑,本人在项目完结的时候打算把浏览器的导航小icon图标给替换了,可是并没有那么顺利,那么如何在vue3中替换 ...
- uni-app插件ColorUI步骤条
1. uni-app插件ColorUI步骤条 1.1. 前言 uni-app就不介绍了,前面几篇已经有所介绍,不知道的可以翻看我前面几篇博客 ColorUI-uniApp是uni-app的一款ui组件 ...
- 完整且易读的最新版小程序登录态和检验注册过没的app.js写法
目录 0.可参考的官方页面 1.流程 2.app.js代码 3.java后台怎么通过code获取openId 0.可参考的官方页面 获取登录凭证:https://developers.weixin.q ...
- Java操作ElasticSearch之创建客户端连接
Java操作ElasticSearch之创建客户端连接 3 发布时间:『 2017-09-11 17:02』 博客类别:elasticsearch 阅读(3157) Java操作ElasticSe ...
- MYSQL的修改表结构SQL语句
更多java学习资料>>> 1.背景 使用sql语句对表结构进行修改 2.案例演示 案例:表结构 CREATE TABLE `login_user` ( `id` ) NOT NUL ...
- Fundebug录屏插件更新至0.4.0,修复BUG,优化性能
摘要: 录屏功能更加强大,欢迎免费试用! 关于Fundebug录屏功能 Fundebug是专业的程序BUG监控服务,当线上应用出现BUG的时候,我们可以第一时间报警,帮助开发者及时发现BUG,提高De ...
- Python学习日记(四十) Mysql数据库篇 八
Mysql存储过程 存储过程是保存在Mysql上的一个别名(就是一堆SQL语句),使用别名就可以查到结果不用再去写SQL语句.存储过程用于替代程序员写SQL语句. 创建存储过程 delimiter / ...