Java 请求确认的捷径
我试图找到一种方法,向用户询问一个是/否问题,以验证输入是否仅为是(y/y)或否(n/n)。我试图减少变量,同时保持可读性。到目前为止,我的想法是:Java 请求确认的捷径,java,validation,performance,Java,Validation,Performance,我试图找到一种方法,向用户询问一个是/否问题,以验证输入是否仅为是(y/y)或否(n/n)。我试图减少变量,同时保持可读性。到目前为止,我的想法是: import java.util.Scanner; public class InputValidation { public static void main(String[] args) { Scanner input = new Scanner(System.in); String answe
import java.util.Scanner;
public class InputValidation
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
String answer;
do
{
System.out.print("Do you wish to proceed? (Y/N): ");
answer = input.next().trim().toUpperCase();
yesAnswer = answer.equals("Y");
} while (answer.matches("[YN]"));
if (yesAnswer)
{
// Do something
}
else
{
// Do something else
}
}
}
我不一定要寻找最少数量的字符;更多的是短而灵活的东西。有什么想法吗?例如,根据您想要实现的目标,我可能会直接评估输入,然后再确定实际结果
do {
System.out.print("Do you wish to proceed? (Y/N): ");
answer = input.next().trim().toUpperCase();
} while (!answer.matches("[YN]"));
boolean yesAnswer = answer.equalsIgnoreCase("Y");
这基本上要等到答案
匹配Y
,N
,Y
,N
后才能确定yesAnswer
。下一件事我可能会做的是用方法包装它
if (askYesNo("Do you wish to proceed? (Y/N): ")) {...
然后,您可以继续为该方法提供可选的退出条件
askYesNo("Delete all files [Ok/Cancel]", "(ok)?", "(cancel)?")
例如
public class YesNo {
public static void main(String[] args) {
if (askYesNo("Do you wish to proceed? (Y/N): ")) {
System.out.println("Okay...");
}
if (askYesNo("Delete all Files? (Okay/Cancel): ", "okay", "cancel")) {
System.out.println("Make it so");
}
}
public static boolean askYesNo(String question) {
return askYesNo(question, "[Y]", "[N]");
}
public static boolean askYesNo(String question, String positive, String negative) {
Scanner input = new Scanner(System.in);
// Convert everything to upper case for simplicity...
positive = postive.toUpperCase();
negative = negative.toUpperCase();
String answer;
do {
System.out.print(question);
answer = input.next().trim().toUpperCase();
} while (!answer.matches(positive) && !answer.matches(negative));
// Assess if we match a positive response
return answer.matches(positive);
}
}
对于其他选项,在方法中,将这些参数转换为
.toUpperCase
或.toLowerCase
——这样,像CaNcEl这样的时髦功能仍然有效。是吗?@mklein994是的,我在想,甚至可以将“肯定”和“否定”响应作为两个参数分开……问号只是字段分隔符,所以我可以使用类似.split(“?”)
@mklein994当然,您可以编译自己的模式配置为忽略大小写;)@mklein994但哪些是阳性反应,哪些是阴性反应??