如何防止Java中的整数输入?

时间:2016-09-14 22:36:20

标签: java

我正在尝试获取代码以防止用户输入中包含数字。

基本上我希望代码执行如下操作:

  1. 要求输入
  2. 接收输入
  3. 测试输入是否包含数字(例如:5matt vs matt)
  4. 如果包含我想要的号码System.out.println("Error: please do not input a number");
  5. 继承人(以及为什么它不是一个重复的问题):我不能使用我们尚未学习的循环或其他语句。到目前为止,我们学到的唯一真实陈述是if / else / else if语句。这意味着我不能使用for循环,就像一些答案所暗示的那样。虽然他们是很好的答案和工作,但我会失去使用它们的分数。

    System.out.println("Please input the first name: ");    
    String name1 = in.next();
    System.out.println("Please input the second name: ");
    String name2 = in.next();
    System.out.println("Please input the third name: ");
    String name3 = in.next();
    
    name1 = name1.substring(0,1).toUpperCase() + name1.substring(1).toLowerCase();
    name2 = name2.substring(0,1).toUpperCase() + name2.substring(1).toLowerCase();
    name3 = name3.substring(0,1).toUpperCase() + name3.substring(1).toLowerCase();
    

    我已经有了这个但我无法弄清楚如何测试输入是否只包含字母。

4 个答案:

答案 0 :(得分:3)

好的,有很多方法可以解决这个问题。一个好处是使用正则表达式(文本匹配的东西)。但似乎你应该只使用非常基本的比较方法。 所以,让我们做一些非常基本且易于理解的事情:我们迭代输入的每个字符,检查它是否是一个数字。

String input = ...
// Iterate over every character
for (int i = 0; i < input.length(); i++) {
    char c = s.charAt(i);

    // Check whether c is a digit
    if (Character.isDigit(c)) {
        System.out.println("Do not use digits!");
    }
}

此代码非常简单。但即使找到了数字,它也会继续检查。您可以使用辅助方法阻止它,然后return来阻止它:

public boolean containsDigit(String text) {
    // Iterate over every character
    for (int i = 0; i < input.length(); i++) {
        char c = s.charAt(i);

        // Check whether c is a digit
        if (Character.isDigit(c)) {
            return true;
        }
    }
    // Iterated through the text, no digit found
    return false;
}

在您的主程序中,您可以这样称呼它:

String input = ...
if (containsDigit(input)) {
   System.out.println("Do not use digits!");
}

答案 1 :(得分:2)

使用正则表达式过滤输入

例如

str.matches(".*\\d.*")

有关详细信息,请参阅this link

答案 2 :(得分:0)

有几种方法可以做到这一点,其中包括:

  • 迭代字符串中的所有字符并检查它们中的任何字符是否为数字。
  • 检查字符串是否包含数字1,数字2,数字3等。
  • 使用正则表达式检查字符串是否包含数字。

Java Regular Expressions

答案 3 :(得分:0)

如果您允许定义函数,则基本上可以使用递归作为循环。可能不是你的教授的目标,但你可能只是在他们的要求之内。

public static boolean stringHasDigit(String s) {
    if (s == null) return false; //null contains no chars
    else return stringHasDigit(s, 0);
}

private static boolean stringHasDigit(String s, int index) {
    if (index >= s.length()) return false; //reached end of string without finding digit
    else if (Character.isDigit(s.charAt(index))) return true; //Found digit
    else return stringHasDigit(s, index+1);
}

仅使用if / elseif / else,Character.isDigit和String.charAt,但递归也可能不受限制。