java字符串的括号匹配

字符串的括号匹配问题有多种解决的方法:

1.使用Stack(栈),对左括符的入栈,再循环判断,右括符是否有对之应的左括符,再出栈,最后判空。

2.使用正则表达式来判断,字符串括号的匹配

3.使用容器来类似stack的功能,这也是我下面所写的。

当然了还有其他的方法,大家可以尽情使用网络,这里我不说大家都懂的^-^。

思维:

在实现之前,先想好自己要怎么实现,需要注意哪些点,避免代码重构,从现在就养成好的习惯。

当然对于大多数人,关键的是先实现匹配问题,接下来再考虑边界问题。

具体代码:

public class Test6 {
    public static void main(String[] args) { //主函数是程序执行的起点
        String s = ")([(2{2}6)3])";      //需要匹配的字符串括号,自己随意输入
        new Match().match(s);              //调用match类的match方法
    }
}


package com.example.demo.boke;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Match {
    public void match(String s) { //match方法需要传入一个String类型的字符串
        List<Character> list = new ArrayList<>();  //我使用的是List列表,来进行主要的核心操作,<Character>表明List内的数据类型是Character
        Map<Character, Character> map = new HashMap<>();  //方便下面的取值,精减代码
        map.put(')', '(');//方便下面的取值,精减代码
        map.put(']', '[');//方便下面的取值,精减代码
        map.put('}', '{');//方便下面的取值,精减代码
        //初始化,定义容器
        int a = 0; //传值判断,列表为空,循环在哪里
        int b = s.length();//获取参数s的长度,方便数组空间的确定
        char[] arrs = new char[b];//建立一个char类数组,拿来存放String的内容

        //将要处理的内容存到容器内,方便进行操作
        for (int i = 0; i < s.length(); i++) {//for循环将String s的内容存入数组中
            arrs = s.toCharArray();//将S的单个字符内容转换成字符数组
        }

        for (int i = 0; i <= arrs.length - 1; i++) { //循环数组arrs
            //判断数组内当前位置的括符是哪一个,是左就存
            if (arrs[i] == '(' || arrs[i] == '{' || arrs[i] == '[') {
                list.add(arrs[i]);
            }

            //判断数组内当前位置的括符是哪一个,是左就存,是右就判断
            if (arrs[i] == '}' || arrs[i] == ']' || arrs[i] == ')') {
                if (list.lastIndexOf(map.get(arrs[i])) != list.size() - 1 || list.isEmpty()) {//判断list内当前最后一个括符是啥,对的上就是移除,否则就报错
                    System.out.println("符号不匹配");
                    break;//字符括号匹配失败,直接break跳出循环,到循环外
                } else {
                    list.remove(list.lastIndexOf(map.get(arrs[i])));//单对括号匹配成功,挪出当前匹配成功的括号
                }
                a = i;//传值判断,列表为空,循环在哪里
            }

        }

        //for循环结束,判断列表内是否为空
        if (list.isEmpty() && a == arrs.length - 1) {
            System.out.println("符号匹配");
        } else {
            System.out.println("符号不匹配");
        }

    }
}

最后你可以将匹配的内容放到一个方法内,也可以写一个类来实例化,当然如果你用接口来封装它那就更加没得说了。保持代码的解耦性,让你的代码看起来逻辑严谨。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云先生呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值