牛骨文教育服务平台(让学习变的简单)
博文笔记

正则表达式实现的加减乘除四则运算的计算器

创建时间:2016-08-02 投稿人: 浏览次数:184
其中Pattern.compile("\(([^()]+)\)")类型的编译模式中的matcher.start()指向的是“(”,而mathcer.end()指向的是“ )”的下一位。
import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Calculator {
    public static void main(String[] args) {
        String src = "(3 + (5 - 2) * 10 / 2 * 3 + 15) * (8 - 4)";
        System.out.println(cal(src));
    }
    public static String cal(String src) {
        StringBuilder builder = new StringBuilder();
        if (src.contains("(")) {
            Pattern pattern = Pattern.compile("\(([^()]+)\)");
            Matcher matcher = pattern.matcher(src);
            int lastEnd = 0;
            while (matcher.find()) {
				
                builder.append(src.substring(lastEnd, matcher.start()));
				System.out.println(builder.toString());
                builder.append(cal(matcher.group(1)));
                lastEnd = matcher.end();
            }
            builder.append(src.substring(lastEnd));
        } else {
            Pattern pattern = Pattern.compile("([\d.]+)\s*([*/])\s*([\d.]+)");
            builder.append(src);
            Matcher matcher = pattern.matcher(builder.toString());
            while (matcher.find()){
                float f1 = Float.parseFloat(matcher.group(1));
                float f2 = Float.parseFloat(matcher.group(3));
                float result = 0;
                switch (matcher.group(2)){
                    case "*":
                        result = f1 * f2;
                        break;
                    case "/":
                        result = f1 / f2;
                        break;
                }
                builder.replace(matcher.start(), matcher.end(),
                        String.valueOf(result));
                matcher.reset(builder.toString());
            }
            pattern = Pattern.compile("([\d.]+)\s*([+-])\s*([\d.]+)");
            matcher = pattern.matcher(builder.toString());
            while (matcher.find()){
                float f1 = Float.parseFloat(matcher.group(1));
                float f2 = Float.parseFloat(matcher.group(3));
                float result = 0;
                switch (matcher.group(2)){
                    case "+":
                        result = f1 + f2;
                        break;
                    case "-":
                        result = f1 - f2;
                        break;
                }
                builder.replace(matcher.start(), matcher.end(),
                        String.valueOf(result));
                matcher.reset(builder.toString());
            }
            return builder.toString();
        }
        System.out.println(builder);
        return cal(builder.toString());
    }
}

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。