我正在编写一个解决数学表达式的程序,例如2 + 2。我可以设置一个等于这样的整数:
val input = "2+2"
input.toInt()
答案 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"