【问题标题】:Trying to figure out how to only accept 1 character from user input试图弄清楚如何只接受来自用户输入的 1 个字符
【发布时间】:2019-08-23 03:38:06
【问题描述】:

我不确定如何验证用户是否只输入了一个字符。我知道我所拥有的长度检查根本不正确。我只是用它来填充。请帮忙。为了找到答案,我尝试了许多不同的方法并搜索了这个网站和其他网站好几天。

final char SIZE = 10;
char [] letter = new char [SIZE];
// initiallizing input device
Scanner scan = new Scanner(System.in);
for (char index = 0; index < SIZE;)
{
    System.out.println ("Please enter Letter #" + (index + 1));// gets letter from user
    while ((!scan.hasNext("[A-Za-z]+")) || (!scan.hasNext(length(1)))){
        if(!scan.hasNext(length (1))){
            System.out.println ("Please only enter one Letter at a time: ");
            letter [index] = scan.next().charAt(0); // accepts first character entered by user
        }
        if(!scan.hasNext("[A-Za-z]+")){
            System.out.println ("Please enter a valid Letter: ");
            letter [index] = scan.next().charAt(0); // accepts first character entered by user
        }
        else if((scan.hasNext("[A-Za-z]+")) && (scan.next(length(1)))){// makes sure letter entered is a letter
            letter [index] = scan.next().charAt(0); // accepts first character entered by user
            index++;// increases index if proper letter entered
        }
    }
}
for (char index = 0; index < SIZE; index++)
{
    System.out.println ("Letter #" + (index + 1) + ": " + letter [index]);// prints characters entered by user in order
}

【问题讨论】:

    标签: java arrays string user-input


    【解决方案1】:

    有很多方法可以做到这一点。一种方法是 A.K.张贴。一种方法如下:

    for (char index = 0; index < SIZE;)
    {
        String temp = scan.nextLine();
    
        if (temp.length() != 1)
        {
            // This means their input was too big
        }
        else
        {
            // This means their input was one character
        }
    
    }
    

    您也可以使用scan.next().charAt(0); 这行代码只会将控制台中的一个字符作为输入。

    如果您有任何问题或此答案不是您想要的,请在下方评论,我很乐意为您提供帮助。

    【讨论】:

      【解决方案2】:

      一个解决方案是这样的:

      Scanner sc = new Scanner(System.in);
      
      System.out.println("Enter char");
      
      String in  = sc.next();
      while(in.length()!=1){
           System.out.println("Enter only a single char");
           in = sc.next();
      }
      // Print the read value
      System.out.println("Your char is = " + in);
      

      如果您还想检查它是否是字母而不是数字,只需在 while 循环中添加一个检查即可。

      【讨论】:

        【解决方案3】:

        只有在用户按下 Enter 后才会将输入放在缓冲区中,因此实际上它始终是一行一行的。您应该始终使您的代码与现实保持一致,因此请始终在中阅读用户输入。

        这个实用方法可能有用:

        private static String read(Scanner scanner, String message, String regex) {
            System.out.println(message);
            String result = "";
            while (true) {
                 result = scanner.nextLine();
                 if (result.matches(regex)) {
                     break;
                 }
                 System.out.println("Invalid input. " + message);
            }
        }
        

        你可以这样称呼它:

        String letter = read(scan, "Please enter Letter #" + (index + 1)", "[A-Za-z]");
        

        read() 方法在只输入一个字母之前不会返回,它会返回那个字母。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-03-11
          • 2020-08-27
          • 2023-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-24
          • 2017-06-11
          相关资源
          最近更新 更多