`
yuancihang
  • 浏览: 145393 次
  • 性别: Icon_minigender_1
  • 来自: 洛阳
社区版块
存档分类
最新评论

Java匹配无限嵌套的括号

    博客分类:
  • java
阅读更多

  在Java中单纯依靠正则表达式是无法匹配无限嵌套的括号的,还好有antlr这个大杀器可以轻松解决这个问题,开源就是好啊。

 

1. 材料

antlr-4.4-complete.jar

 

2. 文法文件Json.g4

grammar Json;

@header{
package a3;	
}

LEFT_BRACKET : '{';
RIGHT_BRACKET : '}';
ANY_CHAR : (~('{' | '}'))+;

bracket_body : LEFT_BRACKET (ANY_CHAR | bracket_body)* RIGHT_BRACKET;
expr : (bracket_body)+;

 

2.测试

 

import java.util.List;

import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream;

import a3.JsonLexer;
import a3.JsonParser;
import a3.JsonParser.Bracket_bodyContext;
import a3.JsonParser.ExprContext;

public class Test3 {

	public static void main(String[] args)throws Exception {
		run("{}{1111}{1:{aa:{s}}}");

	}
	
	public static void run(String expr)throws Exception{
		ANTLRInputStream in = new ANTLRInputStream(expr);
		JsonLexer lexer = new JsonLexer(in);
		CommonTokenStream tokens = new CommonTokenStream(lexer);
		JsonParser exprParser = new JsonParser(tokens);
		ExprContext exprContext = exprParser.expr();
		System.out.println(exprContext.getText());
		List<Bracket_bodyContext> list = exprContext.bracket_body();
		System.out.println(list.size());
		System.out.println(list.get(2).getText());
	}

}

 

是不是很简单呀!只要把大括号替换为中括号或小括号,就可以匹配无限嵌套的中括号和小括号了。

 

分享到:
评论

相关推荐

    java字符串处理取出括号内的字符串

    在Java中,我们可以使用`java.util.regex`包中的`Pattern`和`Matcher`类来匹配和操作符合特定模式的字符串。对于提取括号内的内容,一个简单的正则表达式可以是`\((.*?)\)`,它匹配一对括号,并用`.*?`非贪婪地捕获...

    表达式括号匹配 一个表达式中包括变量、常量、操作符、圆括号,圆括号可以嵌套, 编写程序判断表达式中的括号是否正确匹配。输入任意一个表达式,判断其中括号是否匹配,匹配, 输出OK, 不匹配,输出NO。(表达式的长度小于50)

    一个表达式中包括变量、常量、操作符、圆括号,圆括号可以嵌套, 编写程序判断表达式中的括号是否正确匹配。输入任意一个表达式,判断其中括号是否匹配,匹配, 输出OK, 不匹配,输出NO。(表达式的长度小于50)

    数据结构的括号匹配问题代码

    文档可能还会包含一些特殊情况的处理,比如如何处理非法字符或嵌套括号。 3. **执行文件**:可能是编译后的可执行程序,用户可以直接运行以测试括号匹配功能。输入一个字符串,程序会返回匹配结果,如“匹配成功”...

    用java写的一个带括号的计算器

    这些方法允许程序正确地评估嵌套括号内的运算顺序。 描述中的“自我感觉还可以,如果是初学者的话,可以看看,看下思路也不错”意味着这个项目适合Java初学者学习,它可能包含了简单易懂的代码结构和逻辑,帮助初学...

    IDEA花括号插件

    使用该插件可以显著提高代码阅读和编辑的效率,尤其对于那些需要处理大量嵌套括号的项目,效果尤为明显。此外,IDEA本身拥有丰富的插件库,用户可以根据自己的需求安装其他辅助工具,进一步提升开发效率。 总的来说...

    calculator 带括号的计算器 java版

    【标题】"calculator 带括号的计算器 java版"是一个入门级的Java项目,它主要目的是实现一个能够处理嵌套括号的计算器。在计算过程中,括号的使用允许我们执行优先级更高的运算,这对于理解和掌握编程语言中的运算...

    java计算器含括号可进行优先级运算

    - **Shunting Yard算法**:由Dijkstra提出的,通过一个运算符栈和一个输出队列来处理表达式,避免了复杂度较高的回溯操作,适合处理嵌套的括号和运算符优先级。 3. **Java实现** - **使用`java.util.Stack`**:...

    java-leetcode面试题解Stack之第1111题有效括号的嵌套深度-题解.zip

    总结,Java LeetCode面试题解Stack之第1111题有效括号的嵌套深度,不仅考察了基础的数据结构——栈的运用,还涉及到字符串处理、括号匹配、递归和动态规划等算法知识。理解并能灵活运用这些知识对于提升编程能力和...

    栈的应用 括号匹配,计算器,中缀表达式转换为后缀表达式

    对于括号匹配,可以扩展为处理更复杂的嵌套括号情况。对于计算后缀表达式的值,可以扩展为支持更多类型的运算符和优先级规则。而在中缀表达式转后缀表达式的过程中,可以考虑处理除数为零的情况,以及优化处理多个...

    括号匹配

    这个文件名“Kuohaopipei.java”可能是博主提供的一个Java类,用于实现括号匹配的算法。在Java中,我们可以定义一个名为“Kuohaopipei”的类,其中包含一个或多个方法,比如`isMatch`,用于判断输入的字符串中的括号...

    数据结构与算法——堆栈实现括号匹配

    在这个实验中,我们将通过Java实现堆栈来解决括号匹配的问题。 首先,我们需要理解什么是括号匹配。在编程中,我们经常遇到诸如圆括号 `()`、方括号 `[]` 和大括号 `{}` 这样的配对符号。正确地匹配这些括号对于...

    数据结构(Java语言描述) 案例07 括号匹配的检查.docx

    合法的括号嵌套模式有如 `([ ]( ))` 和 `[([ ])( )]`,而错误的模式如 `([ ]( ] )` 和 `(( )[ ])`。 2. **栈结构**:栈是一种具有“后进先出”(LIFO)特性的数据结构,非常适合用来检查括号匹配。当我们遇到左括号...

    JAVA符号匹配

    栈是一种后进先出(LIFO)的数据结构,非常适合处理具有嵌套性质的问题,如括号匹配、HTML 标签匹配等。 在给定的“JAVA符号匹配”主题中,我们可以深入探讨以下几个知识点: 1. **栈的基本操作**:栈主要有两个...

    IDEA彩虹括号插件.docx

    它通过为嵌套的括号分配不同的颜色,使得代码结构一目了然。 支持多种编程语言,包括Java、Python、JavaScript、C++等,满足不同开发者的需求。 自定义功能: 颜色自定义:用户可以根据自己的喜好或需要,自定义括号...

    Java正则表达式如何匹配特定html标签内的内容

    Java正则表达式是一种在Java编程语言中执行模式匹配操作的强大工具,它可以用来查找、替换或者提取符合特定规则的字符串。在处理HTML内容时,我们常常需要从HTML文档中提取特定标签内的文本内容。这种需求可以通过...

    带括号高精度计算器

    这样可以确保正确处理嵌套括号和运算优先级。 关于大数开方,由于C++标准库没有内置的高精度开方函数,开发者可能选择编写自己的算法或者封装现有的第三方库(如GMP、MPIR等)来实现。开方算法可能基于牛顿迭代法...

    控制台计算器 无限四则、括号、求余运算

    标题中的“控制台计算器 无限四则、括号、求余运算”指的是一个在命令行环境中运行的计算器程序,它可以处理无限长度的四则运算,包括加法(+)、减法(-)、乘法(*)和除法(/),并且支持无限层的括号嵌套来定义...

    华为OD机试C卷- 最大括号深度(Java & JS & Python).md-私信看全套OD代码及解析

    ### 华为OD机试C卷 - 最大括号深度(Java & JS & Python) #### 题目背景与目标 本题目旨在测试应聘者对于数据结构的理解与应用能力,特别是栈这一数据结构的应用场景。题目要求计算由六种括号(即圆括号 `()`、花...

    Jisuanqi.rar_括号 科学计算器_科学计算器_计算器_计算器 java

    描述中提到这是一个科学计算器程序,能够处理包含括号的数学公式,这意味着它支持运算符优先级,可以正确计算带有嵌套括号的复杂表达式。这个计算器是用JAVA编程语言编写的,并且在命令行环境下运行,这意味着用户将...

Global site tag (gtag.js) - Google Analytics