java - 在基于命令行的计算器程序中处理输入的最佳做法是什么?

标签 java string parsing command-line-interface

哟 - 试图回到 java,所以决定创建一个计算器。

假设它是这样工作的:

1) 以字符串的形式获取用户的输入 -> 此输入存储为字符串,例如: 12+89

2) 根据操作符位置拆分字符串,并确保在此操作之前的任何内容都转换为整数并存储

3) 一旦字符串通过,计算值

我很确定我把它弄得比实际情况更复杂 :p 这是目前为止的代码:

// Split String, count digits in string
public static void spitStrg() {
    int numDigits = 0;
    int numOperators = 0;
    for (int i = 0; i < input.length(); i++) {
        if (Character.isDigit(input.charAt(i))) {
            numDigits++;
        }
        else if (input.charAt(i) == '+') {
            System.out.println( "Position of operator: "+i);
            numOperators++;
        }
    }
    System.out.println("Number of Digits: "+numDigits);
    System.out.println("Number of Operators: "+numOperators);
}

// Create a number from cut off point
public static void createNum(int startPoint, int operatorPosition) {
    String tempNum = "";

    for (int j = startPoint; j < operatorPosition; j++) {
        tempNum = tempNum + input.charAt(startPoint);
    }
}

有没有人对如何处理此问题有任何其他建议? IE。一次请求一个数字,然后是运算符或将所有内容存储在一个 vector 中以反射(reflect)越来越多的数字和运算符?

最佳答案

不确定这是否适合您。 (或者作弊?)

您只需让用户将整个表达式作为字符串输入。 23+33-34*2^2

然后你可以:

try {
        final ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
        final Object result = engine.eval("23+33-34*2^2");
        System.out.println(result);
    } catch (final ScriptException e) {

        e.printStackTrace();
    }

运行上面的代码,会给你:

-10

关于java - 在基于命令行的计算器程序中处理输入的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12729602/

相关文章:

java - 对于大型 ByteBuffer,单独 SocketChannel 的并发 read() 速度较慢

java - 如何关闭父窗口并继续在子窗口上执行

c++ - 格式化 : how to convert 1 to “01” , 2 到 “02” , 3 到 "03",等等

parsing - 词法分析器和解析器通信

java - 如何从 Rserve java 客户端加载外部 R 库

java - Hive 在创建表 "Cannot validate serde: com.cloudera.hive.serde.JSONSerDe"时抛出错误

optimization - 使用 R 拆分字符串和计数字符的更快方法?

ruby - 如何拆分角色并保持值(value)

基于 Python 的文档元数据解析器?

java - 仅在部分 html 文档中的链接中替换 &