检查字符串用户输入

丹尼

因此,我想接收用户的输入,检查他们是否使用字母值,然后检查它是否太长。如果时间太长,我想通过调用我所在的方法从顶部重新开始(检查是否按字母顺序)。但是,当我重新开始并键入内容时,说出“ Danny”,这将显示:

输出:“谢谢,丹尼”输出:(先前的长度,输入太长)+“字符太多,请尝试将其保持在30以下。”

因此,它以某种方式保留了原始输入(按字母顺序排列,但大于30),并且在重新开始时不会更改它。有人知道我应该怎么做吗?

public static String inputPattern() {
    Scanner scanner = new Scanner(System.in);
    String player;
    int strLength;

    System.out.println("Please enter your name:");
    while (!scanner.hasNext("[A-Za-z]+")) { //Checks if alphabetical value
        System.out.println("Please stick to the alphabet!");
        scanner.next();
    }
    player = scanner.next();
    player += scanner.nextLine();


    System.out.println("Thank you! Got " + player);

    strLength = player.length(); // Saves the length of user-inputted name
    while (strLength > 30) { // Checks if not too long
        System.out.println(strLength + " is too many characters, please try to keep it under 30");
        inputPattern(); // Starts over again if too long
    }

    return player;
}
ShubhWIP

我已经采用了您的方法并对其进行了一些修改。

这是非递归解决方案。

同样在您的代码扫描器中,资源并未在最后关闭。

迭代解

import java.util.Scanner;

public class SO66064473 {
    public static void main(String[] args) {
        inputPatternIterative();
    }

    public static String inputPatternIterative() {
        Scanner scanner = new Scanner(System.in);
        String player = "";
        int strLength = Integer.MAX_VALUE;

        while (strLength > 30) {                     // Checks if not too long
            System.out.println("Please enter your name:");
            while (!scanner.hasNext("[A-Za-z]+")) {             //Checks if alphabetical value
                System.out.println("Please stick to the alphabet!");
                scanner.next();
            }
            player = scanner.next();
            player += scanner.nextLine();
            System.out.println("Thank you! Got " + player);
            strLength = player.length();       // Saves the length of user-inputted name
            if (strLength > 30)
                System.out.println(strLength + " is too many characters, please try to keep it under 30");
        }
        scanner.close(); // Closing scanner resource after use.
        return player;
    }
}

输出:

Please enter your name:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Thank you! Got aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
70 is too many characters, please try to keep it under 30
Please enter your name:
aaaaaaaaaaaaaaaaaaaa12
Please stick to the alphabet!
coifvoifoivmrfvoirvoirovroijfoirjfoijroifjrwofjorwfouwrfoijwrofjworjfoiwrjf
Thank you! Got coifvoifoivmrfvoirvoirovroijfoirjfoijroifjrwofjorwfouwrfoijwrofjworjfoiwrjf
75 is too many characters, please try to keep it under 30
Please enter your name:
Danny
Thank you! Got Danny

编辑:根据@ Dev-vruper的建议,此处更新了简单的递归代码

递归解

import java.util.Scanner;

public class SO66064473 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        inputPatternRecursive(sc);
        sc.close();
    }

    public static String inputPatternRecursive(Scanner sc) {
        System.out.println("Please enter your name:");
        String player = sc.nextLine();
        if (!player.matches("[A-Za-z]+")) {
            System.out.println("Please stick to the alphabet!");
            inputPatternRecursive(sc);
        } else {
            System.out.println("Thank you! Got " + player);
            if (player.length() > 30) {
                System.out.println(player.length() + " is too many characters, please try to keep it under 30");
                inputPatternRecursive(sc);
            }
        }
        return player;
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章