我正在尝试循环一个字符串并检查每个字符,如果其中一个字符是数字。如果是数字,我想将其恢复为真。我有一个字符串“崩溃”,虽然它返回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;
}
我无法弄清楚出了什么问题。我的逻辑似乎很好,但我的编码不是。
编辑:我明白了。谢谢你的帮助!答案 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 */
}