11 ) || ( 10 == && || Works only on digits 也不想使用ScriptEngineManager() 注-6ren">
gpt4 book ai didi

kotlin - 如何在Kotlin中评估由String表示的 bool 表达式?

转载 作者:行者123 更新时间:2023-12-03 09:41:19 27 4
gpt4 key购买 nike

val exp = "( 0 == 1 && 10 > 11 ) || ( 10 < 9 ) && ( 10 == 10)"
val result: Boolean = evaluate(exp) //result = true/false

如何在Android(Kotlin)中编写一个简单的程序来评估上述字符串并获得 bool 结果?我不想使用像 JEL or JEval, Js Eval or any other library这样的完整评估程序,因为它们对于此特定要求而言太大。
Preconditions :
Operators supported : < > == && ||
Works only on digits

也不想使用 ScriptEngineManager()
注意:javax.script包在Android上不可用。

最佳答案

Android上没有内置选项。您必须使用一些第三方解释器或编写自己的解释器。
我最终使用了JEXL:它很小(〜400KB jar),易于使用。
Gradle依赖关系:

compile 'org.apache.commons:commons-jexl3:3.1'
用法(我创建的包装器):
class ExpressionEvaluator {
private val jexlEngine = JexlBuilder().create()
private val jexlContext = MapContext()

fun evaluate(expression: String): Any? = try {
val jexlExpression = jexlEngine.createExpression(expression)
jexlExpression.evaluate(jexlContext)
} catch (e: JexlException) {
Timber.w("Could not evaluate expression '$expression'") //just logs
null
}

fun evaluateAsBoolean(expression: String): Boolean? {
val boolean = evaluate(expression) as? Boolean
if (boolean == null) {
Timber.w("Could not evaluate expression '$expression' as Boolean") //just logs
}
return boolean
}
}

关于kotlin - 如何在Kotlin中评估由String表示的 bool 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62218073/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com