字符串为布尔值

时间:2014-01-16 21:06:53

标签: java string boolean spreadsheet

我正在用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

4 个答案:

答案 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)”必须按以下顺序进行评估:

  1. “8> 3”子表达式的计算。结果是一个布尔值 真正。表达式现在看起来像= ISLOGICAL(TRUE);
  2. 功能ISLOGICAL评估TRUE参数。结果为TRUE。
  3. 如果你的表达式是= ISLOGICAL(“8> 3”),那么你的函数正确地返回FALSE,因为“8> 3”具有字符串数据类型,而不是布尔值。 评估类似excel的表达式的最佳方法是使用反向抛光表示法。有关详细信息,请按wiki