在Java中评估真实性

在Java中评估真实性,java,string,truthiness,Java,String,Truthiness,我正在用Java编写一个交互式控制台应用程序。我需要用布尔回答向用户提问,但是Scanner.in.nextBoolean()非常脆弱,因为它会对错误输入抛出异常,因此将其包装到方法中似乎是个好主意。我可以使用try/catch块,坚持让用户键入“true”或“false”来回答和捕捉输入错误。但后来我想我可以使用Scanner.in.next()或Scanner.in.nextLine()并使用类似于parseBoolean(字符串s)的方法计算返回字符串的真实性 除了真/假之外,还有什么方法

我正在用Java编写一个交互式控制台应用程序。我需要用布尔回答向用户提问,但是Scanner.in.nextBoolean()非常脆弱,因为它会对错误输入抛出异常,因此将其包装到方法中似乎是个好主意。我可以使用try/catch块,坚持让用户键入“true”或“false”来回答和捕捉输入错误。但后来我想我可以使用Scanner.in.next()或Scanner.in.nextLine()并使用类似于parseBoolean(字符串s)的方法计算返回字符串的真实性

除了真/假之外,还有什么方法可以评估字符串的“真实性”吗?也就是说,“0”/“1”“yes”/“no”也将计算为true/false。

Apache有一个方法
toBoolean
就是这样工作的,但是它没有解析文档中所看到的
0/1

“true”、“on”、“y”、“t”或“yes”(不区分大小写)将返回true。否则,返回false


那么定制实现呢

  • 使用映射并定义true和false的所有值
  • 使用列表;如果值在列表中,则为true,否则为false

  • 如果用户输入了不明显为真或假的内容,例如“foo”,您希望您的程序如何响应?是否应将其视为“假”?或者抛出异常?一种方法是:读取一个字符串,然后按顺序查找“true”的所有变体:t、true、1、yes、y等等,然后将所有其他输入都视为“false”。@kaan,我不想抛出异常,因为我想要一些自包含的东西。所有不明确为真的都是假的。@Nexevis,我重新措辞了问题,但Ri Dan给出的答案并不涉及书籍、工具、软件库等。@Ron Jensen我已经收回了我的关闭标志,因为你不再要求图书馆,然而,通常情况下,您需要包含您尝试的代码,而不仅仅是问一个一般性问题或问“为我提供此问题的解决方案”。
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
    
        // Define true and false values
        Map<String, Boolean> truthiness = new HashMap<>();
    
        truthiness.put("yes", true);
        truthiness.put("1", true);
        truthiness.put("true", true);
        truthiness.put("t", true);
        truthiness.put("ya", true);
        truthiness.put("nein", false);
        //etc
    
        // Define only the true values
        List<String> trueValues = Arrays.asList("yes", "1", "true", "t", "ya");
    
        for(int i = 0; i < 5; ++i) {
            String value = sc.nextLine().toLowerCase();
    
            System.out.println("map: " + truthiness.get(value));
            System.out.println("list: " + trueValues.contains(value));
        }
    }
    
    yes
    map: true
    list: true
    1
    map: true
    list: true
    t
    map: true
    list: true
    ya
    map: true
    list: true
    nein
    map: false
    list: false