检查每个字符的数字

我试图循环一个字符串,并检查每个字符,如果其中一个字符是一个数字。 如果是数字,我想将其恢复为真。 我有一个字符串“崩溃”,虽然它返回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; } 

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

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

我只是按照预期运行该代码并得到false 。 请仔细检查您是否正确运行它。

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

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

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

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

您的代码应该可以正常工作 ,尽管我可能会使用它:

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

那么你可以使用Integer.parseInt("string")并捕获exception。

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

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

 if ("string".replaceAll("\\d+","").length() > 0) { //false } else { //true } 
 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; } 

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

[ 编辑 :此代码与Brockman的相同]

 public boolean isNumber() /* Note: returns true for empty string */ { String newString = "crash"; for (int i=0; i