迷失的季节吉他谱:函数判断字符串中"{"与"}"匹配

来源:百度文库 编辑:九乡新闻网 时间:2024/04/28 10:22:53
用java写一个函数判断字符串中"{"与"}"匹配? 提示:"{"与"}"必须同时出现,"{"必须在"}"前面,允许嵌套

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

    for (int i=0; null!=value && 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            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.");
    }

}