【问题标题】:Calculating Strings in Java, tricky用Java计算字符串,棘手
【发布时间】:2017-11-20 21:09:41
【问题描述】:

我想计算如下字符串:

"-4443- +397" // 应该返回 -4840

" -8844443 / -73897 " //应该返回 119

" 4433 * -7 " // 应该返回 -31038

" +4 * -5897 " // 应该返回 -23588

https://imgur.com/a/vzLix

它非常困难和棘手,我不知道我应该如何计算字符串。 问题不是删除空格,而是我应该如何计算上面的字符串。 :(

public static int calc(String input) {

    String noSpaces = "";
    int i = 0;

    while (i < input.length()) {
        if (input.charAt(i) != ' ') {
            noSpaces = input.charAt(i);
        }
        i++;
 }      

【问题讨论】:

  • 如果在操作符前加空格,可以使用Scanner来解析字符串。
  • 好的,如果您的问题不在于空格,那么您现在的具体问题是什么?你想如何解决问题?需要哪些步骤?您在哪一步有问题?
  • 我认为,您的第一个问题是:如何从方程(以字符串形式给出)中提取有符号数(操作数)及其运算符来计算结果?
  • 可能,我搜索如何,但正则表达式有一些东西。我对正则表达式一无所知。可能约翰尼说的东西会起作用,我也尝试用 charAt 或子字符串做一些事情。但它只适用于一位数字。
  • 这里有一个使用Scanner的简单方法:ideone.com/r3P0MH

标签: string calculator


【解决方案1】:

这仅适用于一位数字

公共类计算器{

static int calc(String input) {
    String nsp = "";
    int nr1;
    int nr2;
    char op;
    int result = 0;

    for (int i = 0; input.length() > i; i++) {

        if (input.charAt(i) != ' ') {
            nsp = nsp + input.charAt(i);
        }

    }

    if (nsp.charAt(0) == '+' || nsp.charAt(0) == '-') {
        nr1 = Integer.parseInt(nsp.substring(0, 2));
        op = nsp.charAt(2);
        if (nsp.charAt(3) == '+' || nsp.charAt(3) == '-') {
            nr2 = Integer.parseInt(nsp.substring(3, 5));
        } else {
            nr2 = Integer.parseInt(nsp.substring(3, 4));
        }
    } else {
        nr1 = Character.getNumericValue(nsp.charAt(0));
        op = nsp.charAt(1);
        if (nsp.charAt(2) == '+' || nsp.charAt(2) == '-') {
            nr2 = Integer.parseInt(nsp.substring(2, 4));
        } else {
            nr2 = Integer.parseInt(nsp.substring(2, 3));
        }
    }

    if (op == '+') {
        result = nr1 + nr2;
    }

    if (op == '-') {
    result = nr1 - nr2;
     }

    if (op == '*') {
        result = nr1 * nr2;
    }

    if (op == '/') {
        result = nr1 / nr2;
    }

    return result;
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 2015-12-27
    • 2020-07-02
    • 1970-01-01
    • 2019-03-02
    • 2021-08-11
    • 2012-05-23
    相关资源
    最近更新 更多