Pet*_*fic 0 java validation methods
我正在尝试编写一种方法来检查字符串中是否只有数字.由于某种原因,即使我输入包含"1234"的字符串,它也会返回false.我猜我的问题是if语句,但我不知道该怎么做才能修复它.
public static boolean isNumeric(String input)
{
input.trim();
for (int count=0; count<=input.length(); count++)
{
if (input.substring(count) == "0" || input.substring(count) == "1"||
input.substring(count) == "2" || input.substring(count) == "3" ||
input.substring(count) == "4" || input.substring(count) == "5" ||
input.substring(count) == "6" || input.substring(count) == "7" ||
input.substring(count) == "8" || input.substring(count) == "9")
{
integerstate = true;
}
else
{
integerstate = false;
break;
}
}
return integerstate;
}
Run Code Online (Sandbox Code Playgroud)
有谁看到问题是什么?
@Kal的回答确实是正确的,但是我的善良@Petefic,这是一种非常低效的做事方式.类中有一个方法Character可以检查a char是否是一个数字,你可以只提取一次,而不是substring()多次调用.
例如,你可能会这样做
public static boolean isNumeric(String input) {
input = input.trim();
for (char c: input.toCharArray()) {
if (Character.isDigit(c))
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
对于数字99999,您的代码将生成超过50个新对象; 这会产生一个(来自的数组toCharArray().)
我看到一些建议使用Integer.parseInt()和捕获异常的其他答案.这不是一个可怕的想法,但如果许多字符串不是数字,它实际上并不是一个好主意.投掷和捕获异常在计算上非常昂贵; 在此过程中创建了许多对象.在不涉及实际错误恢复的情况下应该避免.