【问题标题】:How to prevent integer input in Java?如何防止Java中的整数输入?
【发布时间】:2017-01-22 20:44:10
【问题描述】:

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

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

  1. 征求意见
  2. 接收输入
  3. 测试输入是否包含数字(例如:5matt vs matt)
  4. 如果包含我想System.out.println("Error: please do not input a number");的号码

这就是问题所在(以及为什么这不是一个重复的问题):我不能使用循环或其他我们还没有学过的语句。到目前为止,我们学到的唯一正确的语句是 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();

我已经有了这个,但我不知道如何测试输入是否只包含字母。

【问题讨论】:

  • 您应该习惯于阅读API documentation。具体来说,Character 有一个 isDigit() 方法。
  • 或者,使用正则表达式,比如str.matches(".*\\d.*")(其中strString),它会告诉你如果 String 包含任何数字。
  • if(name1.matches(".*\\d+.*") || name2.matches(".*\\d+.*") || name3.matches(".*\\d+.*")){ // stuff here; } else { //no nums; }
  • “小吐槽:如果我的教授真的教我们一种方法,这不会那么难。” - 我认为你的教授对你很有帮助青睐这里。在现实的编程世界中,您经常会遇到没有人教过您如何解决的小(和大)编程问题。程序员需要学习的一件事是如何自己解决这些问题。

标签: java


【解决方案1】:

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

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!");
    }
}

这段代码非常简单。但即使找到一个数字,它也会继续检查。您可以使用辅助方法防止这种情况发生,然后通过它returning:

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!");
}

【讨论】:

  • 至少使用一个for-each循环。
  • 第一个数字上至少有break
  • 一开始很想,后来想到OP可能不知道这些东西,好像是个初学者。
  • 是的,但即使是初学者也可能喜欢输入 `for (Character c : input...) 而不是 for int counter thingy。
  • containsDigit 最后需要一个return false
【解决方案2】:

使用正则表达式过滤输入

例如

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

更多信息请见this link

【讨论】:

    【解决方案3】:

    有几种方法可以做到这一点,除其他外:

    • 遍历字符串中的所有字符并检查它们是否是数字。
    • 检查字符串中是否包含数字1、数字2、数字3等。
    • 使用正则表达式检查字符串是否包含数字。

    (Java Regular Expressions)

    【讨论】:

      【解决方案4】:

      如果您被允许定义函数,您基本上可以使用递归来充当循环。可能不是你的教授想要的,但根据他们的措辞,你可能只是在要求之内。

      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,但递归也可能不受限制。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-19
        • 1970-01-01
        相关资源
        最近更新 更多