当前位置: 首页 > 面试题库 >

检测以字符串形式存储在java中的运算符的类型

慕容渊
2023-03-14
问题内容

在Java程序中,我具有以下字符串

a= 8,7,"+"
b=1,5,"*"

每行是一个单独的过程。我想在每一行中使用该运算符计算出两个数字。但是我不想使用任何类型的条件系统来检测每行中的哪个运算符。

实际上,我的主要问题是在没有条件的情况下检测操作员的类型。我不想使用Javascript引擎。我想知道是否有任何有效和标准的方法。


问题答案:

J. Selva回应的另一个解决方案:

改进之处

  1. 单班
  2. 静态块
  3. 更好的抽象

导入java.util.HashMap; 导入java.util.Map;

/**
 * Created by SEA-HAWK on 23/8/15.
 */
public abstract class Expr {
    public static Map<String,Object> op;
    static{
        op=new HashMap<>();
        op.put("+", new Expr() {
            @Override
            public int evaluate(int a, int b) {
                return a + b;
            }
        });
        op.put("-", new Expr() {
            @Override
            public int evaluate(int a, int b) {
                return a - b;
            }
        });
        op.put("*", new Expr() {
            @Override
            public int evaluate(int a, int b) {
                return a * b;
            }
        });

        op.put("/", new Expr() {
            @Override
            public int evaluate(int a, int b) {
                return a / b; // decimal point loss
            }
        });
    }
    abstract public int evaluate(int a, int b);
    public static int exprEval(String expr){
        String a[]=expr.split(",");
        a[2]=a[2].replaceAll("\"","");
        return ((Expr)op.get(a[2])).evaluate(Integer.parseInt(a[0]),Integer.parseInt(a[1]));
    }
}

主功能:

public static void main(String[] args) {
    String x="20,10,\"*\"";
    System.out.println(x+"="+Expr.exprEval(x));
     x="20,10,\"+\"";
    System.out.println(x+"="+Expr.exprEval(x));
     x="20,10,\"-\"";
    System.out.println(x+"="+Expr.exprEval(x));
    x="20,10,\"/\"";
    System.out.println(x+"="+Expr.exprEval(x));
}

输出:

20,10,"*"=200
20,10,"+"=30
20,10,"-"=10
20,10,"/"=2

注意:更改数据类型以进行浮点/小数计算。



 类似资料:
  • 每当我在这个集合中保存一些数据时,我就声明了一个类LoanDetails和一个包含BigDecimal类型loanAmount的字段 它以字符串形式存储在mongo db数据库中 我试图在loanAmount字段上添加注释

  • 这章我们来着重介绍一下字符串。 刚刚学习Rust的同学可能会被Rust的字符串搞混掉,比如str,String, OsStr, CStr,CString等等…… 事实上,如果你不做FFI的话,常用的字符串类型就只有前两种。我们就来着重研究一下Rust的前两种字符串。 你要明白的是,Rust中的字符串实际上是被编码成UTF-8的一个字节数组。这么说比较拗口,简单来说,Rust字符串内部存储的是一个u

  • 现在的Rust资料,无论是Book还是RustByExample都没有统一而完全的介绍Rust的操作符。一个很重要的原因就是,Rust的操作符号和C++大部分都是一模一样的。 一元操作符 顾名思义,一元操作符是专门对一个Rust元素进行操纵的操作符,主要包括以下几个: -: 取负,专门用于数值类型。 *: 解引用。这是一个很有用的符号,和Deref(DerefMut)这个trait关联密切。 !:

  • 问题内容: 我有一个输入String说。许多浏览器/ IDE /应用程序都会检测到字符串的url部分,并自动添加锚点。这样就变成了。 我需要使用Java进行相同的操作。 问题答案: 为此使用java.net.URL! 嘿,为什么不对这个“ java.net.URL”使用Java的核心类,而让它验证URL。 尽管以下代码违反了“仅在特殊情况下使用异常”这一黄金原则,但对Java平台上已经成熟的某些东

  • 我知道这个问题很简单。但我想知道布尔运算符的字符串格式。例如,下面显示了整数、字符串和浮点数的字符串格式。布尔运算符真/假可能是什么?

  • 问题内容: 我对String串联感到困惑。 输出为: 50abc20 50abc1010 我想知道为什么在两种情况下都将 20 + 30 加在一起,但是 10 + 10 需要加上括号(s1)而不是串联到String(s2)。请在此处说明String运算符的工作方式。 问题答案: 加法保持关联。以第一种情况 在第二种情况下: