在处理文本时会遇到提取括号中的内容。如下文本:

根据《工业和信息化部关于印发电话用户真实身份信息登记实施规范的通知》(工信部网安〔2018〕105号)

要求提取出成对符号中的内容。提取后内容如下:

{“括号内容3”:"(工信部网安〔2018〕105号)",“括号内容2”:"〔2018〕",“括号内容1”:"《工业和信息化部关于印发电话用户真实身份信息登记实施规范的通知》"}

具体如何操作先看思路:
1.遍历字符串
1.只要有左括号就算有内容 ->不完整内容
2.只要有右括号且检查是否有左括号(成对括号出现) 有左括号就算完整的内容

具体Java代码实现:

/*** 括号是否成对出现* 利用栈的先进后出特性来判断字符串的符合是否成对出现* 出现一次左边的进栈,出现一次右边的出栈,栈最终为空即为成对出现* @param text* @return*/public static boolean isSymbolTwin(String text){//定义左右括号关系Map<Character,Character> bracket  = new HashMap<>();bracket.put(')','(');bracket.put(']','[');bracket.put('}','{');bracket.put('】','【');bracket.put(')','(');bracket.put('》','《');bracket.put('>','<');bracket.put('〕','〔');Stack stack = new Stack<>(); //定义栈for (int i = 0; i < text.length(); i++) {Character nowStr = text.charAt(i); //转换成字符串//是否为左括号if (bracket.containsValue(nowStr)){stack.push(nowStr);}else if (bracket.containsKey(nowStr)){ //是否为右括号if (stack.isEmpty()) return false;if (stack.peek().equals(bracket.get(nowStr))){ //左右括号匹配stack.pop(); //退栈}else {return false;}}}return stack.isEmpty() ? true : false;}/*** 提取出成对符号的内容* @param text* @return*/public static JSONObject getSymbolStr(String text){//定义左右括号关系Map<Character,Character> bracket  = new HashMap<>();bracket.put(')','(');bracket.put(']','[');bracket.put('}','{');bracket.put('】','【');bracket.put(')','(');bracket.put('》','《');bracket.put('>','<');bracket.put('〕','〔');List<Object> bracketList = new LinkedList<>(); //残缺的括号内容JSONObject jsonObject = new JSONObject(); //完整的括号内容int count = 1;for (int x = 0; x < text.length(); x++) {Character nowStr = text.charAt(x);if (bracket.containsValue(nowStr)){ //如果是左括号if (bracketList.size() > 0) { //如果不是第一次左括号说明之前还有左括号如:(工信部网安〔2018〕105号) 有俩左括号for (int i = 0; i < bracketList.size(); i++) {StringBuilder sb = (StringBuilder) bracketList.get(i);sb.append(nowStr);}}StringBuilder sb = new StringBuilder();sb.append(nowStr);bracketList.add(sb);}else if (bracket.containsKey(nowStr)){ //是右括号for (int i = 0; i < bracketList.size(); i++) {StringBuilder sb = (StringBuilder) bracketList.get(i);sb.append(nowStr); //添加右括号if (isSymbolTwin(sb.toString())){ //判断当前文本是否符合成对符号//符合jsonObject.put("括号内容" + count++,sb.toString());bracketList.remove(sb); //删除已经成对的内容 确保不会出现多次}else {}}}else if (bracketList.size() > 0){ //已经有了左括号for (int i = 0; i < bracketList.size(); i++) {StringBuilder sb = (StringBuilder) bracketList.get(i);sb.append(nowStr);}}}return jsonObject;}public static void main(String[] args) {String new_name = "根据《工业和信息化部关于印发电话用户真实身份信息登记实施规范的通知》(工信部网安〔2018〕105号),";System.out.println(getSymbolStr(new_name));


如果左右括号不成对,则不能得出结果如:(),一个中文的左括号和一个英文的右括号。

Java提取成对括号内容 支持扩展多种括号相关推荐

  1. 手撸Java提取QSV文件视频内容

    手撸Java提取QSV文件视频内容 QSV文件的构成详见上一篇文章,这篇文章带你手把手撸一遍代码. 创建类 第一步新建一个java类QSV,构造函数传入需要解析的文件名称. public class ...

  2. java正则 括号_java正则表达式获取大括号小括号内容并判断数字和小数亲测可用...

    获取大括号小括号内容 项目开发用到了,暂做个简单记录 private static String regex = "\\{([^}]*)\\}";//匹配大括号 private s ...

  3. Java正则获取小括号中的内容_java正则表达式获取大括号小括号内容并判断数字和小数亲测可用...

    获取大括号小括号内容 项目开发用到了,暂做个简单记录 private static String regex = "\\{([^}]*)\\}";//匹配大括号 private s ...

  4. Java实现图形化计算器(支持括号、开平方)

    Java实现图形化计算器(支持括号.开平方) Java实习作业,实现一个图形化计算器,正好赶上周末作业不多就写了一个计算器.功能不是特别全,但是能满足一些最基本的需求(比如小学三年级及以下的数学题,, ...

  5. java 正则提取$ 中内容_JAVA 使用正则从文字中提取想要的内容

    有时候我们想从一段文字中提取想要的内容,如省市区地址中提取出省市,从股票的数据中提取出关键的价格信息,抓取HTML文件后提取内容等等这些场景,这时我们可以使用JAVA正则表达式帮助我们提取出想要的数据 ...

  6. java编程括号匹配,Java正则表达式括号内容匹配

    Java正则表达式括号内容匹配 工作中碰到的一些问题与解决方法记录下来以备不时之需 商品品名规定英文括号正则表达式拆分规则 .*? :所有内容 [1-9] :整数数字1到9 \d :0到9 \d* : ...

  7. 诺基亚n1支持java功能_诺基亚N1支持扩展卡吗?诺基亚N1支持多大的储存卡?

    诺基亚N1支持扩展卡吗 诺基亚N1不支持扩展卡. 诺基亚N1采用7.9英寸屏幕,4:3比例.2048x1536分辨率.PPI为324.采用大猩猩3代玻璃.Z Launcher不会改变系统界面和色彩.主 ...

  8. java 正则 小括号_java正则表达式匹配小括号内的内容

    正则表达式用来指定字符串模式.当你需要定位匹配某种模式的字符串时就可以使用正则表达式.例如,我们下面的一个例程就是在一个HTML文件中通过查找字符串模式来定位所有的超链接.     当然,为了指定一种 ...

  9. Java基础易忘重点内容笔记【附B站韩顺平老师课程链接】

    B站课程链接:https://www.bilibili.com/video/BV1fh411y7R8?spm_id_from=333.999.0.0 1. 文档注释 用于对Java方法的注释,可据此生 ...

  10. 《Java工程师成神之路》终于免费开放下载了!

    很多Java程序员一直希望找到一份完整的学习路径,但是市面上很多书都是专注某一个领域的,没有一份完整的大图,以至于很多程序员很迷茫,不知道自己到底应该从哪里开始学,或者不知道自己学习些什么. 好在,很 ...

最新文章

  1. 【Android】OpenGL ES for Android 教程1 - HelloWorld
  2. azure mysql 配置,微软Azure云MySQL in-app 的配置,简化PHP内容管理系统配置
  3. WEB服务器和HTTP服务器和应用服务器的区别?(web服务器就是HTTP服务器)为什么要把Web服务器独立配置,和应用程序服务器一前一后?
  4. 英语音标 语言、语音、音素及音标
  5. java中正则表达式
  6. HashMap的put方法返回值问题
  7. 合泰单片机市场占有率_holtek单片机图文全面详解
  8. [SHOI2001]小狗散步
  9. Android学习笔记---26_采用JSON格式返回数据给资讯客户端,效率上要高于xml文件解析和传输
  10. 【Computer Organization笔记16】大实验任务详细说明:支持指令流水的计算机系统设计与实现
  11. dvwa学习笔记之xss
  12. HeadFirstJava 4,5,6
  13. linux查看 网卡信息
  14. zip 和rar 的区别
  15. 漫画:为什么不能打断程序员?
  16. h3c 云服务器操作系统,产品技术-H3C CloudOS云操作系统电信版-新华三集团-H3C
  17. 自下而上和自上而下的注意力:不同的过程和重叠的神经系统 2014sci
  18. [V5] self的resend,JS实现
  19. 挂茶馆VIP问道教程
  20. ThinkPad E40无线网卡驱动安装 FOR CENTOS6.3

热门文章

  1. c语言编程中的大于号怎么打,excel表格中怎么输入比较运算符号(大于、小于号)?...
  2. 高性能JSON框架之FastJson的简单使用
  3. colormap保存 matlab_matlab中colormap用法
  4. shift键计算机功能,shift键功能有哪些 shift键有哪些功能【详解】
  5. Java jsp导出Excel打开报格式或扩展名错误
  6. 华为OD机试 - 勾股数元组
  7. 方舟生存进化服务器存档位置,方舟生存进化如何转移存档
  8. Linux at命令使用介绍
  9. 相控阵天线(三):直线阵列天线低副瓣综合(切比雪夫、泰勒分布、SinZ-Z和Villeneuve分布、含python代码)
  10. 蓝叠模拟器的adb程序位置