我正在用Java制作电子表格。
我想复制一下Microsoft Excel函数ISLOGICAL
。
它检查值是否为逻辑值(TRUE或FALSE),并返回TRUE或FALSE。
所有单元格都是字符串数组。这就是我现在所拥有的:
public static String islogical(String[] value){
String err = "#ERROR!";
if (value.length != 1){
return err;
}
boolean a = false;
try{
a = Boolean.parseBoolean(value[0]);
}
catch(IllegalArgumentException e){return err;}
String ans = "FALSE";
if(a){
ans = "TRUE";
return ans;
}
else{
return ans;
}
}
我不明白为什么,如果我的string value = "8>3"
,它没有给我回复true
。除字符串= true
外,所有输入都返回false
。
答案 0 :(得分:1)
我不明白为什么,如果我的'字符串值=“8> 3”',它不会给我回'真'
这是因为parseBoolean()
不评估表达式。
来自Javadoc:
将字符串参数解析为布尔值。返回的布尔值表示值
true
,如果字符串参数不是null
且忽略大小写,则表示字符串"true"
。示例:Boolean.parseBoolean(“True”)返回true。
示例:Boolean.parseBoolean(“yes”)返回false。
答案 1 :(得分:1)
Boolean.parseBoolean()将返回字符串的布尔表示形式。所以“True”返回true,每个thign返回false。
您想要的是评估字符串 - 请查看https://stackoverflow.com/questions/3422673/evaluating-a-math-expression-given-in-string-form
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
public static String islogical(String[] value){
String err = "#ERROR!";
if (value.length != 1){
return err;
}
boolean a = false;
try{
a = engine.eval(value[0]);
}
catch(IllegalArgumentException e){return err;}
String ans = "FALSE";
if(a){
ans = "TRUE";
return ans;
}
else{
return ans;
}
}
答案 2 :(得分:0)
您是否尝试过使用eval
方法?以下是Is there an eval() function in Java?的示例:
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Object result = engine.eval("3+4");
答案 3 :(得分:0)
函数求值的参数必须具有简单的数据类型,如数字,布尔值,字符串等。所有子表达式必须在调用函数之前计算。
表达式“= ISLOGICAL(8> 3)”必须按以下顺序进行评估:
如果你的表达式是= ISLOGICAL(“8> 3”),那么你的函数正确地返回FALSE,因为“8> 3”具有字符串数据类型,而不是布尔值。 评估类似excel的表达式的最佳方法是使用反向抛光表示法。有关详细信息,请按wiki。