前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何处理java中对{},[],() 的解析,不仅可以用正则,也可以用堆栈的方式,算法的想法做

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

作者头像
gfu
发布2019-08-28 14:42:19
5150
发布2019-08-28 14:42:19
举报
文章被收录于专栏:gfugfu
  • 首先把字符串中的{,[,(压入栈,循环字符串,把},],)出栈。
  • 再用一个map存放{},[],() 。判断最后一个出栈的元素是否和第一个入栈的元素是否符合map。
  • 如果不符合,则出入的参数有误
  • 再把通过split的字符串进行拼接成自己想要的样子,就可以啦!
代码语言:javascript
复制
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;
        }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.07.31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档