1

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

有没有办法评估字符串的“真实性”超出真/假?也就是说,“0”/“1”“是”/“否”也将评估为真/假。

4

2 回答 2

1

Apache BooleanUtils有一个toBoolean像这样工作的方法,但是它并没有0/1像我在文档中看到的那样解析

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

于 2019-08-20T20:34:52.853 回答
1

自定义实现呢?

  1. 使用地图并定义 true 和 false 的所有值
  2. 使用列表;如果值在列表中,则为 true,否则为 false
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
于 2019-08-20T20:49:09.897 回答