java 验证逻辑表达式格式的字符串的合法性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 验证逻辑表达式格式的字符串的合法性相关的知识,希望对你有一定的参考价值。

求助:需求是:用户输入一个字符串,字符固定只能是大写的A、B、C、D的4个或者其中几个,逻辑运算符只能是:&&、||、!、^ ,中间可以使用括号,如: A && B || C && D 、 (A || B) && (C || D)、A && B 等这些都符合要求,但是 AB || C 或者出现其他字符都不让通过,想到应该应该使用正则表达式,但是不知道怎么写,或者使用代码实现也行,求大牛帮忙,感谢!!!!

能力有限,写的代码可能有些麻烦,不知道还有没有漏洞了。。你看看行不

public class Main

    public static void main(String[] args)
    
        String str = "A && (!B && C) || C && D &&";
        System.err.println(matched(str));  // 此时打印“完全匹配”
    
    
    public static String matched(String str)
    
        if (str.matches("[() ABCD\\\\|&!\\\\^]*"))  // 保证只有ABCD|&()!^和空格
        
            if (str.matches(".*[ABCD] *[ABCD]+.*"))
                return "字母重叠";
            if (str.contains("&"))  // 如果有“&”符号出现
            
                int index = str.indexOf("&");
                while (index != -1 && index < str.length())
                
                    if (index + 1 >= str.length() || str.charAt(index + 1) != '&')
                        return "\\"&\\"未成对出现";
                    else
                    
                        index += 2;
                        if (index > str.length())
                            return "\\"&\\"未成对出现";
                        index = str.indexOf("&", index);
                    
                
            
            if (str.contains("|"))  // 如果有“|”符号出现
            
                int index = str.indexOf("|");
                while (index != -1 && index < str.length())
                
                    if (index + 1 >= str.length() || str.charAt(index + 1) != '|')
                        return "\\"|\\"未成对出现";
                    else
                    
                        index += 2;
                        if (index > str.length())
                            return "\\"|\\"未成对出现";
                        index = str.indexOf("|", index);
                    
                
            
            return "完全匹配";
        
        return "有未知字符存在";
    

追问

感谢,有思路就行,有漏洞我自己补充,感谢支持!~~
无法验证以下两种情况:
String str = "A && || C"; //两个逻辑运算符中间没有字符,正确的格式如“A && C || B”
String str = "A && B !C"; //‘!’ 运算符的特殊处理,正确的格式如“A && B || !C”
已解决,但是不知道怎么贴代码.....

追答

哈哈客气了 有问题接着问 我不需要采纳率的

参考技术A 我有一个方法,但不大好。大概效果是这样的:在控制台运行程序,然后输入你要检测的字符串,通过nextLine读入,然后通过if等进行比对和判断,在if里面设置正确和错误的判定就可以了

以上是关于java 验证逻辑表达式格式的字符串的合法性的主要内容,如果未能解决你的问题,请参考以下文章

java实现判断时间是否为合法时间

逻辑思考之,指定轮次提交赛事结果验证是否合法

二叉树在表达式中的应用-命题逻辑表达式的真值表计算程序

JAVA中写邮箱格式的正则表达式,怎么写?

用装饰器封装Flask-WTF表单验证逻辑

java字符串操作,验证输入的身份证合法与否