出于函数目的从拆分中获取Java运算符

出于函数目的从拆分中获取Java运算符,java,if-statement,split,match,Java,If Statement,Split,Match,好的。。。我想我试图简化这段代码,可能是疯了。我将(*,+,/,-)等运算符放置在拆分中。知道我想单独调用他们来执行if(operators.equals.(+){ 返回num1+num2.} 然后,对于*,-,/透视图 在我之前的代码中使用数学,如何正确地做到这一点: String function = "[+\\-*/]+"; //this String[] token = input.split(function);//and this double num1 = Double.par

好的。。。我想我试图简化这段代码,可能是疯了。我将
(*,+,/,-)
等运算符放置在拆分中。知道我想单独调用他们来执行
if(operators.equals.(+){
返回num1+num2.}
然后,对于*,-,/透视图

在我之前的代码中使用数学,如何正确地做到这一点:

String function = "[+\\-*/]+"; //this

String[] token = input.split(function);//and this

double num1 = Double.parseDouble(token[0]);

double num2 = Double.parseDouble(token[1]);

double answer;

String operator = input.toCharArray()[token[0].length()]+"";

if (operator.matches(function) && (token[0]+token[1]+operator).length()==input.length()) {

System.out.println("Operation is " + operator+ ", numbers are " + token[0] + " and " + token[1]);
} else {

      System.out.println("Your entry of " + input + " is invalid");
}
你没有。 仅返回
字符串
中不匹配的部分。如果想知道匹配的代码,需要使用更复杂的正则表达式,即and类,或者自己编写
String
tokenization类

在本例中,
Token
是您自己创建的一个类):

public List generateTokenList(字符串输入){
列表=新的LinkedList();
for(char c:input.toCharArray()){
if(字符isDigit(c)){
//手柄数字盒
}else如果(c=='+'){
//handle plus
}else如果(c=='-'){
//句柄减号
}否则{
/*你明白了吗*/
}
}
}

有一些图书馆可以为你做这件事,比如说,但这听起来像是学校的作业,所以你可能不得不艰难地完成这件事。

如果你的
身体像

if (operator.matches(function) && 
        (token[0] + token[1] + operator).length() == input.length()) 
{
    double result = 0;
    if (operator.equals("+")) {
        result = num1 + num2;
    } else if (operator.equals("-")) {
        result = num1 - num2;
    } else if (operator.equals("*")) {
        result = num1 * num2;
    } else if (operator.equals("/")) {
        result = num1 / num2;
    }
    System.out.printf("%.2f %s %.2f = %.2f%n", num1, operator, num2,
            result);
}

您的代码也能按预期工作

对不起,你的问题是什么?我在解析“在我以前的代码中使用数学,如何正确地做到这一点”时遇到了问题?我不是想写数学,我的意思是,我如何放置if和if-else语句,这些语句被认为是用两个数字返回运算符。示例:num1是5运算符是*而num2是1,所以答案是5。如果我的运算符都捆绑在索引中,我该怎么做?那么您正在尝试构建计算器的解析器部分?很抱歉,但是没有(简单的)方法来映射“如果你遇到这个符号,那么就这样做”(你称之为“单独地调用它们”)。您可以做的是将
标记映射到方法名,并使用java反射调用该方法。但仅此而已。此外,我不知道与您的不同之处是什么?@mali,我实际上想将我编写的功能齐全的代码升级为行数少得多的代码,因此我决定消除单独调用每个操作符的垃圾,现在我在确保代码的兼容性方面遇到了问题。知道它们是捆绑的,如果选择的操作员是+打电话返回num1+num2,我该如何做。明白了吗?写在重点上,但你能告诉我这是什么?printf(“%.2f%s%.2f=%.2f%n”我建议你读一下.“%.2f”是一个小数点后有两位数字的浮点数,“%s”是一个
字符串,而“%n”是新行.所以它会打印类似于“#.####.###.####.####.######.####其中
(s)(and)被值替换。
if (operator.matches(function) && 
        (token[0] + token[1] + operator).length() == input.length()) 
{
    double result = 0;
    if (operator.equals("+")) {
        result = num1 + num2;
    } else if (operator.equals("-")) {
        result = num1 - num2;
    } else if (operator.equals("*")) {
        result = num1 * num2;
    } else if (operator.equals("/")) {
        result = num1 / num2;
    }
    System.out.printf("%.2f %s %.2f = %.2f%n", num1, operator, num2,
            result);
}