java识别加减运算验证码

我还是妹子啊 发布于 2018/11/05 15:24
阅读 341
收藏 0

用java写一个程序,用来识别加减运算验证码,求大佬分享

加载中
0
foy
foy

记得应该是本科数据结构的栗子吧?没括号的话堆栈处理下即可。

foy
foy
回复 @beijingxiaoqi : 偶错了,大佬。
b
beijingxiaoqi
不会还在这装,人家问的是使用ocr技术识别图片验证码,你在这整什么数据结构
0
逆流de鱼
逆流de鱼
    public static int explanation(String exp) {
        Pattern compile;
        // 先乘除、再加减
        if (exp.contains(Sign.DIVIDE.signChar) || exp.contains(Sign.MULTIPLY.signChar)) {
            compile = Pattern.compile("(\\w+|\\d)(\\*|\\/)(\\w+|\\d)");
        } else {
            compile = Pattern.compile("(\\w+|\\d)(\\+|\\-)(\\w+|\\d)");
        }
        Matcher matcher = compile.matcher(exp);
        if (matcher.find()) {
            int val = Sign.get(matcher.group(2)).optional(Integer.valueOf(matcher.group(1)), Integer.valueOf(matcher.group(3)));
            return explanation(matcher.replaceFirst(String.valueOf(val)));
        }
        return Integer.valueOf(exp);
    }

    enum Sign {

        PLUS("+") {
            @Override
            public int optional(int a, int b) {
                return a+b;
            }
        },

        SUB("-"){
            @Override
            public int optional(int a, int b) {
                return a-b;
            }
        },

        MULTIPLY("*"){
            @Override
            public int optional(int a, int b) {
                return a*b;
            }
        },

        DIVIDE("/"){
            @Override
            public int optional(int a, int b) {
                return a/b;
            }
        };

        private String signChar;

        Sign(String signChar) {
            this.signChar = signChar;
        }

        public static Sign get(String singChar) {
            for (Sign sign : values()) {
                if (singChar.equals(sign.signChar)){
                    return sign;
                }
            }
            return null;
        }
        
        public abstract int optional(int a, int b);
    }

 

返回顶部
顶部