Kotlin中的整数可以等于数学表达式吗?

时间:2017-07-14 03:37:25

标签: kotlin

我正在编写一个解决数学表达式的程序,例如2 + 2。我可以设置一个等于这样的整数:

val input = "2+2"
input.toInt()

5 个答案:

答案 0 :(得分:6)

Kotlin没有任何内置的方法来评估任意表达式。 toInt函数只能解析包含单个整数的String(它只是Integer.parseInt的包装器。)

如果您需要此功能,则必须自己解析并评估表达式。这个问题与在Java中必须这样做没有什么不同,您可以在其中找到讨论和多个解决方案(包括黑客,代码示例和库)here

答案 1 :(得分:1)

不,你不能。

你可以这样:

val a = "2"
val b = "2"
val c = a.toInt() + b.toInt()

或者

val input = "2+2"
val s = input.split("+")
val result = s[0].toInt() + s[1].toInt()

答案 2 :(得分:0)

这可以使用kotlin脚本引擎完成。有关详细信息,请参阅Dynamically evaluating templated Strings in Kotlin

但简而言之,它是这样的:

val engine = ScriptEngineManager().getEngineByExtension("kts")!!
engine.eval("val x = 3")
val res = engine.eval("x + 2")
Assert.assertEquals(5, res)

答案 3 :(得分:0)

不,您不能将字符串数学表达式直接转换为整数。

但是您可以尝试以下方法将字符串数学表达式转换为整数 ->>

    var exp: String = "2+3-1*6/4"
    var num: String = ""
    var symbol: Char = '+'
    var result: Int = 0

    for(i in exp)
    {
        if(i in '0'..'9')
            num += i
        else
        {
            if(symbol == '+')
                result += Integer.parseInt(num)
            else if(symbol == '-')
                result -= Integer.parseInt(num)
            else if(symbol == '*')
                result *= Integer.parseInt(num)
            else if(symbol == '/')
                result /= Integer.parseInt(num)

            num=""
            symbol = i
        }
    }

    //To calculate the divide by 4 ( result/4 ) in this case
    if(symbol == '+')
        result += Integer.parseInt(num)
    else if(symbol == '-')
        result -= Integer.parseInt(num)
    else if(symbol == '*')
        result *= Integer.parseInt(num)
    else if(symbol == '/')
        result /= Integer.parseInt(num)

    println("result is $result") //Output=> result is 6
}

答案 4 :(得分:-2)

不,整数不能等于数学表达式。

您可以使用字符串模板

字符串可能包含模板表达式,即已评估的代码片段,其结果将连接到其中 串。

模板表达式以美元符号($)开头,由简单名称组成:

  val i = 10
  val s = "i = $i" // evaluates to "i = 10"