打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
函数判断字符串中"{"与"}"匹配
用java写一个函数判断字符串中"{"与"}"匹配? 提示:"{"与"}"必须同时出现,"{"必须在"}"前面,允许嵌套

public static boolean isMatch(String value)
{
    int counter= 0;  // 记录{出现的次数

    for (int i=0; null!=value && i<value.length(); i++)
    {
        char ch = value.charAt(i);
        if (ch == '{') counter++;
        if (ch == '}') counter--;
        if(counter<0) return false;  // 确保"{"先出现
    }
    return counter==0;
}


public class T {
    public static boolean isMatch(String value) {
        int numCount = 0, numMatch = 0;
        for (int i=0; null != value && i<value.length(); i++) {
            char ch = value.charAt(i);
            if (ch == '{') {
                numCount ++;
                numMatch ++;
            } else if (ch == '}') {
                numCount --;
            }
            if (numCount < 0) {
                return false;
            }
        }

        return (numMatch > 0 && numCount == 0);
    }

    public static void main(String args[])  {
        System.out.println( "=========must false=====" );
        System.out.println( isMatch(null) );
        System.out.println( isMatch("") );
        System.out.println( isMatch("ddddd") );
        System.out.println( isMatch("d{dddd") );
        System.out.println( isMatch("dd{}}ddd") );
        System.out.println( isMatch("d}dd{dd") );

        System.out.println( "=========must true=====" );
        System.out.println( isMatch("dd{}ddd") );
        System.out.println( isMatch("ddd{{}d}d") );
        System.out.println( isMatch("d{d{d}d}d") );
    }
}



//正则有点暴力嵌套层数有限, 更好的写法是: /^((?:[^{}]++|{(?1)})*+)$/ ,不过不清楚java支不支持。


import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestCurlyBraces
{

    private Pattern pattern = Pattern.compile("[^{}]*(\\{[^{}]*(\\{[^{}]*\\}[^{}]*)*\\}[^{}]*)*[^{}]*");

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        TestCurlyBraces instance = new TestCurlyBraces();
        String input = "asda{asd{fsfsff}sdfab245}2{32}";
        instance.match(input);
    }

    public void match(String input)
    {
        Matcher match = pattern.matcher(input);
        if (match.matches())
            System.out.println(match.group());
        else
            System.out.println("not matched.");
    }

}


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
字符串分割
正则表达式真的很6,可惜你不会写
正则表达式学习经验分析
java用substring函数截取string中一段字符串
java中String字符串的替换函数:replace与replaceAll的区别
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服