【问题标题】:Identifying Number in String Using For Loops使用 For 循环识别字符串中的数字
【发布时间】:2017-05-07 07:50:22
【问题描述】:

我正在尝试确定使用 for 循环提供的输入中是否有数字。我已经尝试了很长时间,甚至在谷歌的第二页上搜索过。我决定寻求一些帮助。到目前为止,这是我尝试过的:

for (c = 0 ; c < 6 ; c = c++)
{
    c = input.charAt (0);

    if (Character.isDigit (c))
    {
        System.out.println ("Input must only contain letters.");
        return;
    }

}

基本上,我试图扫描每个字母,并单独测试它们是字母还是数字,这是我遇到的麻烦,因为只扫描第一个字母。我也试过在循环中输入“c++”。我将如何扫描每一个字母?

编辑:哎呀,那是个错误。我把它改成 c = c + 1 但它不起作用,我把它改回 c++ 但它最终变成了 c = c++。

【问题讨论】:

  • 您正在寻找正则表达式或遍历每个字符并使用 Character.isDigit() 函数检查它是否为数字。看下面的问题:stackoverflow.com/questions/18590901/…
  • 如何使用"str.matches(".*\\d+.*");"?我对编码有点陌生,我们还没有完全了解这一点。
  • String myString = "在此处插入您的字符串 123"; System.out.println(myString.matches(".*\\d+.*"));如果您的字符串与该正则表达式匹配,它将返回 true。正则表达式检查字符串中是否存在任何数字。

标签: java loops for-loop numbers letter


【解决方案1】:

试试这个:

public void check(String word){

    int n=word.length();  // To Find length of the string.
    for(int c=0;c<n;c++ ){ 
        char ch=word.charAt(c); // for extracting every single element of word

        if(Character.isDigit(ch))  // To check if its Digit
        {
            System.out.println ("Input must only contain letters.");
            break;
        }
    }

    System.out.println ("All Good");
}

【讨论】:

  • 您能用英语解释一下您在原始代码中看到的问题,而不是仅仅说“试试这个”吗?您的代码示例很好,并且 cmets 也很棒,但因为它是这个答案可能很难有人解释(特别是因为它与原始代码没有区别)。
  • 感谢 Guildencratz 指出我的错误,下次我会处理这个问题。
【解决方案2】:

我已经创建了这个布尔函数检查是否有帮助。

public static boolean containtsDigits(String input) {
        boolean isDigit = false;
        if(input != null && !input.isEmpty()){
            char[] letterCharArray = input.toCharArray();
            for(int i = 0 ; i < letterCharArray.length ; i++){
                if(Character.isDigit(letterCharArray[i])){
                    isDigit = true;
                    break;
                }
            }
        }

        return isDigit;
    }

【讨论】:

    【解决方案3】:

    使用正则表达式和 Java 的 Pattern 类:

    boolean b = Pattern.matches("[0-9]+", input);
    

    如果您不熟悉正则表达式,[0-9]+ 将在字符串中找到 0 到 9 之间的任何数字出现一次或多次(“+”运算符)。那么你需要做的就是检查变量b是真(表示搜索找到了一个数字)还是假(字符串中没有数字)。

    此外,我注意到您正在通过以下方式增加循环变量 c:

    c = c++
    

    这个操作实际上对c的值没有影响。赋值语句中变量后面的 ++ 运算符表示“将变量的值增加一个 您将其当前值分配给另一个变量。然后发生的事情是您将 c 的值分配给本身,将 c 加一。这个增加的值永远不会保存回 c,因此您的循环可能会无限继续。增加循环变量的正确方法如下:

    for (c = 0; c < 6; c++) {
        // ...
    }
    

    【讨论】:

      【解决方案4】:

      您不能同时使用c 作为索引和值。试试这个:

      for (int i = 0; i < 6; i++) {
          c = input.charAt(i);
          // ...
      }
      

      【讨论】:

      • 哦,我明白了。这是有道理的。
      【解决方案5】:

      这一行:c = input.charAt(0); 有两个问题。

      首先,您可能不想在每次循环执行时都重置迭代值c。因此,也许可以将其更改为不同的变量,如下所示:

      char chr = input.charAt(....
      

      其次,您只获取了第一个 char,因为您将 0 发送到 .charAt() 函数。试试这个:

      char chr = input.charAt(c);
      if (Character.isDigit (chr))
      {
          System.out.println ("Input must only contain letters.");
          return;
      }
      

      【讨论】:

      • 谢谢,我明白了。我尝试了很多实验,这就是为什么很多东西都处于不同的位置。我会交出我的代码,再次感谢。
      猜你喜欢
      • 1970-01-01
      • 2015-08-02
      • 2017-12-24
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      • 2013-04-29
      • 1970-01-01
      • 2021-10-06
      相关资源
      最近更新 更多