Java 请求确认的捷径

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

我试图找到一种方法,向用户询问一个是/否问题,以验证输入是否仅为是(y/y)或否(n/n)。我试图减少变量,同时保持可读性。到目前为止,我的想法是:

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但哪些是阳性反应,哪些是阴性反应??