在Java中评估真实性
我正在用Java编写一个交互式控制台应用程序。我需要用布尔回答向用户提问,但是Scanner.in.nextBoolean()非常脆弱,因为它会对错误输入抛出异常,因此将其包装到方法中似乎是个好主意。我可以使用try/catch块,坚持让用户键入“true”或“false”来回答和捕捉输入错误。但后来我想我可以使用Scanner.in.next()或Scanner.in.nextLine()并使用类似于parseBoolean(字符串s)的方法计算返回字符串的真实性 除了真/假之外,还有什么方法可以评估字符串的“真实性”吗?也就是说,“0”/“1”“yes”/“no”也将计算为true/false。Apache有一个方法在Java中评估真实性,java,string,truthiness,Java,String,Truthiness,我正在用Java编写一个交互式控制台应用程序。我需要用布尔回答向用户提问,但是Scanner.in.nextBoolean()非常脆弱,因为它会对错误输入抛出异常,因此将其包装到方法中似乎是个好主意。我可以使用try/catch块,坚持让用户键入“true”或“false”来回答和捕捉输入错误。但后来我想我可以使用Scanner.in.next()或Scanner.in.nextLine()并使用类似于parseBoolean(字符串s)的方法计算返回字符串的真实性 除了真/假之外,还有什么方法
toBoolean
就是这样工作的,但是它没有解析文档中所看到的0/1
“true”、“on”、“y”、“t”或“yes”(不区分大小写)将返回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