专栏首页gfu如何处理java中对{},[],() 的解析,不仅可以用正则,也可以用堆栈的方式,算法的想法做

如何处理java中对{},[],() 的解析,不仅可以用正则,也可以用堆栈的方式,算法的想法做

  • 首先把字符串中的{,[,(压入栈,循环字符串,把},],)出栈。
  • 再用一个map存放{},[],() 。判断最后一个出栈的元素是否和第一个入栈的元素是否符合map。
  • 如果不符合,则出入的参数有误
  • 再把通过split的字符串进行拼接成自己想要的样子,就可以啦!
public static String[] getSplitString(String param) {

            String[] rawParams = param.split(",");
            int len = rawParams.length;
            ArrayStack stack = new ArrayStack(param.length());
            Map<String, String> map = new HashMap<>();
            map.put("{", "}");
            map.put("[", "]");
            map.put("(", ")");
            String[] gParams = new String[len];
            int index = 0;
            StringBuffer buffer = new StringBuffer();
            for (int i = 0; i < len; i++) {
                char[] c = rawParams[i].toCharArray();
                int l = c.length;
                for (int j = 0; j < l; j++) {
                    if (c[j] == 91 || c[j] == 123 || c[j] == 40) {
                        stack.push(c[j]);
                    }
                    if (c[j] == 93 || c[j] == 125 || c[j] == 41) {
                        String temp = String.valueOf(stack.pop());
                        if (c[j] != map.get(temp).toCharArray()[0]) {
                            return null;
                        }
                    }

                }

                if (stack.size() > 0) {
                    buffer.append(rawParams[i]);
                    buffer.append(",");
                } else {
                    gParams[index] = buffer.append(rawParams[i]).toString();
                    index++;
                    buffer = new StringBuffer();
                }

            }

            int glen = gParams.length;
            for (int k = 0; k < glen ; k++) {
                if (null == gParams[k]) {
                    continue;
                }
                char[] chars = gParams[k].toCharArray();
                int l = chars.length;
                if (chars[0] == 34 || chars[0] == 39) {
                    gParams[k] = String.valueOf(chars, 1, l - 2);
                }
            }
            return gParams;
        }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 传入参数的双引号以及单引号的处理方案,可以在此基础上进行扩展

    gfu
  • linux快捷键 grep

    作为linux中最为常用的三大文本(awk,sed,grep)处理工具之一,掌握好其用法是很有必要的。

    gfu
  • java 优雅代码for循环 之性能调优

    大家在工作中,用到最多的就是for循环了,但是你知道如何写for循环可以提高系统的性能呢? 我从以下几个方面对如何写for循环给大家几个事例,希望可以帮到你们

    gfu
  • Java 判断是否是 Ajax 异步请求

    一个会写诗的程序员
  • 【小家Spring】Spring MVC容器的web九大组件之---HandlerMapping源码详解(一)---BeanNameUrlHandlerMapping系列

    在这篇文章里: 【小家Spring】Spring MVC容器启动时,web九大组件初始化详解(Spring MVC的运行机制) 已经大概介绍过web九大组件...

    YourBatman
  • laravel5.6框架操作数据curd写法(查询构建器)实例分析

    本文实例讲述了laravel5.6框架操作数据curd写法(查询构建器)。分享给大家供大家参考,具体如下:

    砸漏
  • 【数据分析】TalkingData:游戏数据分析流程

    文/ 于洋 TalkingData高级咨询总监 1.3 游戏数据分析的流程 游戏数据分析整体的流程将分为几个阶段,这几个阶段则是反映了不同企业数据分析的水平,从...

    陆勤_数据人网
  • 支持向量机SVM入门详解:那些你需要消化的知识

    出自:嘉士伯的Java小屋 http://www.blogjava.net/ (一)SVM的八股简介 支持向量机(Support Vector Machine)...

    机器学习AI算法工程
  • 快速学习-处理响应数据

    cwl_java
  • 小心 Nginx 的 add_header 指令

    但响应头部没有这些header。除了常规的header,仅出现了一个配置配置在location中的header X-Cache。

    周三不加班

扫码关注云+社区

领取腾讯云代金券