最近工作需要,要截取一个sql中某个函数,刚好这个函数有括号,将此函数截掉,写了个匹配括号的程序,主要是基于字符串的索引写的
package com.cai.test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author * * 2016年8月21日 */ public class Bracket { public static void main(String[] args) { Bracket bracket = new Bracket(); String sql = "SELECT Flt_Dpt_Dt" + " ,CASE WHEN Lane_Area IN ('港澳','台湾' ) THEN '港澳台' " + " ELSE Lane_Area " + " END AS Flt_Duty_Area " + " ,SUM (Total_Cap_Qty*Seg_Distance) AS ASK " + " FROM " + " (SELECT *" + " FROM PV_MART.ITM_FLIGHT_BASE T1" + " WHERE Lane_Type = '国际'" + " AND Leg_Ind <>'N'" + " AND (Flt_Dpt_Dt >=DATE '2014-01-01')" + " QUALIFY ROW_NUMBER() OVER(PARTITION BY Carrier_Cd,Flt_Dpt_Dt,Flt_Nbr,Lane_Area,Orig_Airport_Cd,Dest_Airport_Cd ORDER BY Dcp_Dt ) =1) T1 GROUP BY 1,2"; sql = bracket.formatStrBackspace(sql.replaceAll("QUALIFY ROW_NUMBER\\(\\)", "")); int index = sql.indexOf("OVER(") + 4; //System.out.println(index); String str = "(()()((()())))"; Map<Integer, Integer> bracketIndex = bracket.bracketIndex(sql); // System.out.println(bracketIndex); System.out.println(sql.substring(index-4, bracketIndex.get(index)+1)); } /** * 对字符串的括号进行配对 * 将字符的左括号和右括号索引进行存储,然后遇见右括号取出 * 步骤: * 将字符串先进行格式化,多个空格的用单个空格替换 * 根据括号规则分析可知:(()(()())) * 先取内部括号,后取外部括号 * @param str 字符创 * @param s 匹配的字符 */ public Map<Integer, Integer> bracketIndex(String str) { Map<Integer, Integer> indexMap = new HashMap<Integer, Integer>(); List<Integer> leftList = new ArrayList<Integer>(); List<Integer> rightList = new ArrayList<Integer>(); str = formatStrBackspace(str); char[] chs = str.toCharArray(); for (int i=0;i<chs.length;i++) { if(chs[i] == '(') { leftList.add(i); } else if(chs[i] == ')') { rightList.add(i); } } //42, 107, 150, 237, 288, 295 53, 134, 268, 289, 397, 401 一次后的结果为 150 if(leftList.size() == rightList.size()) { int size = leftList.size(); //取出内部括号匹配索引,一对括号的右括号必定在前后两个左括号中间 outter:for(int j=0;j<size;) { inner:for (int i=0;i<size;i++) { if(i+1<size) { if(rightList.get(j) > leftList.get(i) && rightList.get(j) < leftList.get(i+1)) { indexMap.put(leftList.get(i), rightList.get(j)); leftList.remove(i); rightList.remove(j); size--; break inner; } } else { break outter; } } } //最后剩余的括号则为外括号,里外对应即可 if(size > 0) { for(int i=0;i<size;i++) { indexMap.put(leftList.get(i), rightList.get(size-(i+1))); } } } return indexMap;//288=289, 237=268, 295=397, 42=53, 107=134, 150=401 } public String formatStrBackspace(String str) { return str.replaceAll(" +", " "); } }
如果有更好的方法,请提出好的意见。
相关推荐
括号匹配java源代码 在文本处理中,括号匹配是非常重要的一种操作。括号匹配java源代码就是实现这种操作的命令行程序。该程序使用栈数据结构来实现括号匹配的检测。 栈(Stack) 栈是一种_last in, first out_...
看到大家对括号匹配问题很感兴趣, 再发一个用Java编写的括号匹配程序+实验报告, Funtion: 来检测C语言程序中的简单语法错误。例如:不配对的圆括号、方括号和花括号。并注意单引号、双引号和注释段的处理。
本教程将深入讲解如何利用Java中的Stack类来实现括号匹配算法。 首先,我们要理解栈的基本概念。栈是一种后进先出(LIFO)的数据结构,类似于图书馆的书架,新放上去的书籍(元素)只能最后取走。在Java中,`java....
在编程领域,括号匹配是一项基础且重要的任务,特别是在处理表达式、代码解析或编译器设计时。本文将深入探讨如何使用C语言和数据结构中的循环队列来实现括号匹配的算法。 首先,我们需要了解什么是循环队列。循环...
在Java中,栈结构因其后进先出(LIFO)的特性被广泛用于实现括号匹配算法,本文将结合实例深入分析Java中如何应用栈来实现括号匹配算法。 首先,我们需要了解栈的基本概念。栈是一种线性数据结构,允许进行插入和...
2. 实现括号匹配算法:在`ParenthesesMatchTest.java`文件中,我们可以编写一个方法,如`isParenthesesMatch`,接收一个包含括号的字符串作为参数。 ```java public boolean isParenthesesMatch(String parentheses...
本项目"java-Editor.zip"是一个基于Java实现的简易IDE,模仿了流行的notepad2编辑器,专注于核心的编辑功能,如代码高亮、括号匹配、书签管理、撤销/重做以及文本搜索。 首先,我们要讨论的是代码染色(Code ...
栈在处理许多问题时特别有用,其中包括括号匹配。括号匹配是计算机科学中一个基础且关键的问题,主要用来检查一个字符串中的左右括号是否正确配对。例如,我们常见的括号有大括号`{}`、小括号`()`、中括号`[]`。 在...
数据结构的括号匹配问题是一个经典的计算机科学问题,主要涉及到字符串处理、递归算法和栈数据结构的应用。在编程领域,括号匹配通常用于检查一个字符串中的括号是否正确配对,例如在数学表达式、XML或JSON格式的...
在IT领域,栈的应用广泛且实用,特别是在处理括号匹配、计算器运算以及中缀表达式转后缀表达式的问题上。 1. **括号匹配**: 在编程语言中,括号(如圆括号"()"、方括号"[]"和大括号"{}")用于定义代码块或表达式...
### C语言实现表达式括号匹配算法解析 ... - 除了C++外,括号匹配算法也可以用其他编程语言实现,例如Python、Java等。 通过上述分析,我们可以深入了解如何利用栈解决括号匹配问题,并掌握其实现细节和扩展方向。
这个文件名“Kuohaopipei.java”可能是博主提供的一个Java类,用于实现括号匹配的算法。在Java中,我们可以定义一个名为“Kuohaopipei”的类,其中包含一个或多个方法,比如`isMatch`,用于判断输入的字符串中的括号...
在本案例中,我们探讨了如何使用数据结构,特别是栈(Stack),来检查括号匹配的问题。这个案例属于计算机科学中的基础算法分析,涉及到编译原理和字符串处理。以下是详细的知识点解析: 1. **括号匹配**:括号匹配...
在这个实验中,我们将通过Java实现堆栈来解决括号匹配的问题。 首先,我们需要理解什么是括号匹配。在编程中,我们经常遇到诸如圆括号 `()`、方括号 `[]` 和大括号 `{}` 这样的配对符号。正确地匹配这些括号对于...
【免费题库】华为OD题库C卷 - 表达式括号匹配(Java 代码+解析).html
在软件开发过程中,经常需要处理字符串,其中一个常见的需求就是判断一个字符串中的括号是否正确匹配。本篇文章将详细探讨如何通过Java编程语言来实现括号的配对检查。 #### 二、核心概念与术语解释 1. **括号配对*...
【免费题库】华为OD机试 - 括号匹配(Java & JS & Python & C & C++).html
一个表达式中包括变量、常量、操作符、圆括号,圆括号可以嵌套, 编写程序判断表达式中的括号是否正确匹配。输入任意一个表达式,判断其中括号是否匹配,匹配, 输出OK, 不匹配,输出NO。(表达式的长度小于50)
【免费题库】华为OD机试 - 表达式括号匹配(Java & JS & Python & C & C++).html付费专栏内容,免费下载,多种语言解法
顺序栈括号匹配的代码