检查每个字符的数字

时间:2011-10-05 00:14:50

标签: java string

我正在尝试循环一个字符串并检查每个字符,如果其中一个字符是数字。如果是数字,我想将其恢复为真。我有一个字符串“崩溃”,虽然它返回true(它有一个数字)。

这是我到目前为止所拥有的:

public boolean isNumber()
{
  String newString = "crash";
  boolean isNumber = true;
  for (int i=0; i<newString.length(); i++)
  {
     if (Character.isDigit(newString.charAt(i)))
     {
        isNumber = true;
        continue; // continue looping through the string. Go on to the next index.
                  // The character at index i is a number.
     }
     else
     {
        isNumber = false; 
        break; // terminate the for-loop and return it as false! It is not a number!
     }
   }
  return isNumber;
}

我无法弄清楚出了什么问题。我的逻辑似乎很好,但我的编码不是。

编辑:我明白了。谢谢你的帮助!

6 个答案:

答案 0 :(得分:3)

我刚刚运行了该代码,我按预期得到了false。请仔细检查您是否正确运行。

顺便说一下,这是一种表达该功能的简单方法:

public boolean isNumber(String string) {
  for (int i = 0; i < string.length(); i++) {
    if (!Character.isDigit(string.charAt(i))) {
      return false;
    }
  }

  return true;
}

答案 1 :(得分:1)

你的代码should work correctly,虽然我可能会改用它:

public boolean isNumber(String newString)
{
    for (int i=0; i != newString.length(); i++)
    {
        if (!Character.isDigit(newString.charAt(i))) 
        {
            return false;
        }
    }
    return true;
}

// a regex equivalent
public boolean isNumberRegex(String newString)
{
    return newString.match("\\d+");
}

上述方法检查所有字符是否为数字。

如果我误解了您的问题,并且您想检查任何字符是否为数字:

public boolean hasNumber(String newString)
{
    for (int i=0; i != newString.length(); i++)
    {
        if (Character.isDigit(newString.charAt(i))) 
        {
            return true;
        }
    }
    return false;
}

// regex equivalent
public boolean hasNumberRegex(String newString)
{
    return newString.match(".*\\d.*");
}

答案 2 :(得分:1)

您可以使用Integer.parseInt("string")并捕获异常。

try {
     int num = Integer.parseInt("string");
     return true;
} catch (NumberFormatException nfe) {
     return false;
}

或者使用regEx的另一种方式:

if ("string".replaceAll("\\d+","").length() > 0) { 
    //false 
} else { 
    //true
}

答案 3 :(得分:1)

也许我没有正确理解你...但是因为你使用相同的变量“isNumber”,并且当你得到一个肯定的匹配时继续...你将返回的结果将永远是最后一个字符串的字符,除非你得到一个非数字字符,在这种情况下,你马上退出。

您想检查整个字符串是否为数字?或者如果它包含数字?

答案 4 :(得分:0)

public static boolean isNumber(String str)
{
    int len = str.length();
    boolean isNumber = false;

    for(int i = 0; i < len; i++)
    {
        if(Character.isDigit(str.charAt(i)))
            return true;
    }

    return isNumber;
}

答案 5 :(得分:0)

我认为这段代码应该可行,但在我看来,设置一个变量然后打破只是为了返回它是很难看的。 (我知道其他编码员喜欢这样;恕我直言他们错了。)我也不喜欢引入不必要的测试变量,比如NullUserException的解决方案。我会直接回来。

[ EDIT :此代码与Brockman相同]

public boolean isNumber() /* Note: returns true for empty string */
{
String newString = "crash";
for (int i=0; i<newString.length(); i++)
{
   if (!Character.isDigit(newString.charAt(i)))
   {
    return false; /* non-digit detected */
   }
 }
return true; /* all characters were digits */
}