将字符串转换为java中的运算符(+*/-)

vohkndzv  于 2023-04-19  发布在  Java
关注(0)|答案(6)|浏览(166)

我使用Stack类来计算简单的算术表达式,包括整数,如1+2* 3。你的程序将按照给定的顺序执行操作,而不考虑操作符的优先级。* 因此,表达式1+23应该计算为(1+2)3=9,而不是1+(23)=7。
如果我得到的输入为1+2
3,我知道如何将字符串1,2,3转换为Integer。但我不知道如何将+,* 从字符串类型转换为运算符。
我的代码逻辑是:例如:给定字符串2 +(3 * 5),因此3 * 5将首先被操作,然后+2将在3 * 5的结果中被执行。

sbtkgmzw

sbtkgmzw1#

可能最好的方法是equals,但最好忽略空格:
我不太确定你是如何分割字符串,但是例如,如果你有一个字符op和两个整数ab

String str = op.replace(" ", "");

if(str.equals("*")){
   retVal = a*b;
} else if(str.equals("+")){
   retVal = a+b;
}//etc
pjngdqdw

pjngdqdw2#

按照Ogen的建议做,手动检查操作符。一个快速的快捷方式来做if,else if…结构是switch,也就是说

switch(operand) {
case "*":
      break;
case "+":
      break; 
 .....
 default:
}
htzpubme

htzpubme3#

您必须手动检查并分配操作员。

if (s.equals("+")) {
    // addition
}
mxg2im7a

mxg2im7a4#

快速解决方案:使用下面的代码在java中执行正确的javascript算术表达式。

ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine se = manager.getEngineByName("JavaScript");        
    try {
        Object result = se.eval(val);
        System.out.println(result.toString());
    } catch (ScriptException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
1hdlvixo

1hdlvixo5#

好的,假设你的赋值需要使用Stack类,并且你已经有了选择数字(包括负数--除了一种情况外,在所有情况下都是一个运算符后面跟着另一个运算符)和运算符和括号的逻辑,你可以做的如下。
如果遇到数字,从堆栈中弹出最后两个元素。弹出的第一个项目将是运算符,下一个将是数字。评估表达式并将其推入堆栈并继续。
你可以忽略括号。你也必须处理第一次阅读数字或括号的情况。

8aqjt8rx

8aqjt8rx6#

老实说我也在寻找答案。我想做一个计算器应用程序,所以我试图把一个字符串直接转换成一个操作,但在互联网上找了几个小时后,我什么也没找到,所以我最终自己做了这个程序,因为我是一个初学者,这并不容易。所以这是我的程序,它不使用括号或逗号。你只能使用四个运算符“+ - * /”“但除此之外,一切似乎都在工作。
它非常简单,只需从除法开始,取两个数字和表示操作数的字符串,然后将其切成三个字符串,然后用两个数字进行运算,然后用结果替换运算,直到没有除法为止。
下面是我的函数orderOp的描述:将调用另一个函数getOp:得到操作的字符串,所以如果你给它“2+4*5/6”,你会得到5/6 cutString:把字符串分成三部分,如果你给它5/6,你会得到一个字符串数组,里面有[“5”,"/",“6”]:接受cutString的数组,并根据arr[1],因此在本例中,“/”将使用

class Operateur{
private static final DecimalFormat decfor = new DecimalFormat("0.00");
public static String Op(String s){
    String[] equation = cutString(s);
    double sol = 0;
    switch (equation[1]){
        case "/":
            sol = Double.parseDouble(equation[0])/Double.parseDouble(equation[2]);
            break;
        case "*":
            sol = Double.parseDouble(equation[0])*Double.parseDouble(equation[2]);
            break;
        case "+":
            sol = Double.parseDouble(equation[0])+Double.parseDouble(equation[2]);
            break;
        case "-":
            sol = Double.parseDouble(equation[0])-Double.parseDouble(equation[2]);
            break;
    }
    return sol+"";
}

public static String[] cutString(String s){
    String[] arr = new String[0];
    if(s.contains("+")){
        arr = s.split("((?=[//+])|(?<=[//+]))");
    }
    if(s.contains("-")){
        arr = s.split("((?=-)|(?<=-))");
    }
    if(s.contains("*")){
        arr = s.split("((?=[//*])|(?<=[//*]))");
    }
    if(s.contains("/")){
        arr = s.split("((?=[///])|(?<=[///]))");
    }
    return arr;
}

public static void orderOp(String equation){
    while(equation.contains("/")){
        equation = equation.replace(getOp(equation),(decfor.format(Double.parseDouble(Op(getOp(equation))))).replace(',', '.'));

    }
    System.out.println("Division :" +equation);
    while(equation.contains("*")){
        equation = equation.replace(getOp(equation),decfor.format(Double.parseDouble(Op(getOp(equation)))).replace(',', '.'));
    }
    System.out.println("Multiplication:" +equation);
    while(equation.contains("+")){
        equation = equation.replace(getOp(equation),Op(getOp(equation)));
    }
    System.out.println("addition:" +equation);
    while(equation.contains("-")&& (equation.replaceAll("[^.]", "").length()>1)){
        equation = equation.replace(getOp(equation),Op(getOp(equation)).replace(',', '.'));
        equation = RemoveNegative(equation);
        System.out.println(equation);
    }
    System.out.println("soustraction:" +equation);

}

public static String getOp(String s){
    String r ="";
    if(s.contains("/")){
        int slash = s.indexOf("/");
        int first = slash;
        int last = slash;
        first -= 1;
        while((first >= 0)&&(s.charAt(first) != '+')&(s.charAt(first) != '-')&(s.charAt(first) != '*')&(s.charAt(first) != '/')){
            first -= 1;
        }
        first += 1;
        last += 1;
        while((last < s.length())&&(s.charAt(last) != '+')&(s.charAt(last) != '-')&(s.charAt(last) != '*')&(s.charAt(last) != '/')&&(s.charAt(last) != '/')){//&(last >= s.length())
            if(last < s.length()) {
                last += 1;
            }
        }
        r = s.substring(first,last);
    }
    else if(s.contains("*")){
        int slash = s.indexOf("*");
        int first = slash;
        int last = slash;
        first -= 1;
        while((first >= 0)&&(s.charAt(first) != '+')&(s.charAt(first) != '-')&(s.charAt(first) != '*')&(s.charAt(first) != '/')){
            first -= 1;
        }
        first += 1;
        last += 1;
        while((last < s.length())&&(s.charAt(last) != '+')&&(s.charAt(last) != '-')&&(s.charAt(last) != '*')&&(s.charAt(last) != '/')){
            if(last < s.length()) {
                last += 1;
            }
        }
        r = s.substring(first,last);
    }
    else if(s.contains("+")){
        int slash = s.indexOf("+");
        int first = slash;
        int last = slash;
        first -= 1;
        while((first >= 0)&&(s.charAt(first) != '+')&(s.charAt(first) != '-')&(s.charAt(first) != '*')&(s.charAt(first) != '/')){
            first -= 1;
        }
        first += 1;
        last += 1;
        while((last < s.length())&&(s.charAt(last) != '+')&&(s.charAt(last) != '-')&&(s.charAt(last) != '*')&&(s.charAt(last) != '/')){
            if(last < s.length()) {
                last += 1;
            }
        }
        r = s.substring(first,last);
    }
    else if(s.contains("-")){
        int slash = s.indexOf("-");
        int first = slash;
        int last = slash;
        first -= 1;
        while((first >= 0)&&(s.charAt(first) != '+')&(s.charAt(first) != '-')&(s.charAt(first) != '*')&(s.charAt(first) != '/')){
            first -= 1;
        }
        first += 1;
        last += 1;
        while((last < s.length())&&(s.charAt(last) != '+')&&(s.charAt(last) != '-')&&(s.charAt(last) != '*')&&(s.charAt(last) != '/')){
            if(last < s.length()) {
                last += 1;
            }
        }
        r = s.substring(first,last);
    }

    return r;
}

public static String RemoveNegative(String s){
    s = s.replace("-+","-");
    s = s.replace("+-","-");
    if(s.charAt(0) == '-'){
        s = s.replaceFirst("-","");
        s = s.replace("-","+");
        while(s.contains("+")){
            s = s.replace(getOp(s),Op(getOp(s)));
        }
        s = "-"+s;
    }
    return s;
}

}

相关问题