评估 Java 中的真实性
Evaluate truthiness in Java
我正在 Java 中编写交互式控制台应用程序。我需要用 Boolean 响应向用户提问,但是,Scanner.in.nextBoolean() 相当脆弱,因为它会在不正确的输入时抛出异常,因此将其包装在一个方法中似乎一个好主意。我可以只使用 try/catch 块并坚持让用户键入 "true" 或 "false" 来回答并找出拼写错误。但后来我想我可以使用 Scanner.in.next() 或 Scanner.in.nextLine() 并使用类似 parseBoolean(String s).
的东西评估返回的字符串的真实性
有没有办法评估 "truthiness" 超出 true/false 的字符串?也就是说,"0"/"1" "yes"/"no" 的计算结果也会是 true/false.
Apache BooleanUtils 有一个方法 toBoolean
像这样工作,但是它不解析 0/1
就我在文档
中看到的
'true', 'on', 'y', 't' or 'yes' (case insensitive) will return true. Otherwise, false is returned.
自定义实现怎么样?
- 使用映射并定义 true 和 false 的所有值
- 使用列表;如果值在列表中则为 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
我正在 Java 中编写交互式控制台应用程序。我需要用 Boolean 响应向用户提问,但是,Scanner.in.nextBoolean() 相当脆弱,因为它会在不正确的输入时抛出异常,因此将其包装在一个方法中似乎一个好主意。我可以只使用 try/catch 块并坚持让用户键入 "true" 或 "false" 来回答并找出拼写错误。但后来我想我可以使用 Scanner.in.next() 或 Scanner.in.nextLine() 并使用类似 parseBoolean(String s).
的东西评估返回的字符串的真实性有没有办法评估 "truthiness" 超出 true/false 的字符串?也就是说,"0"/"1" "yes"/"no" 的计算结果也会是 true/false.
Apache BooleanUtils 有一个方法 toBoolean
像这样工作,但是它不解析 0/1
就我在文档
'true', 'on', 'y', 't' or 'yes' (case insensitive) will return true. Otherwise, false is returned.
自定义实现怎么样?
- 使用映射并定义 true 和 false 的所有值
- 使用列表;如果值在列表中则为 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