说明:给定一个字符串,判断它是否为整数。例如,字符串“123”是一个整数,但字符串“hello”不是。
如果字符串中的所有字符都是数字,则为整数。
如果是整数,则返回true;如果不是,则返回false。
提示:有一个方法Character.isDigit(),它接受一个字符作为参数并返回一个布尔值。
到目前为止,我所拥有的:
public boolean isInteger(String str) {
if(Character.isDigit(str.charAt(0)) == 0) {
return false;
}
for (int i = 0; i < str.length(); i++) {
if(Character.isDigit(str.charAt(i))) {
break;
} else {
return false;
}
}
return true;
}我在返回字符串"101“的布尔值时遇到问题,根本没有字符串(”")
发布于 2016-11-10 11:42:15
您可以使用正则表达式。
return str.matches("\\d+");但对负数不起作用。
您还可以使用Integer.parseInt并捕获NumberFormatException,并相应地返回true/false。
或者,您不应该中断您找到的第一个数字,因为您需要检查所有字符,直到您找到一个不是数字的数字。同样,这不能捕获负数。
public boolean isInteger(String str) {
if(str == null || str.trim().isEmpty()) {
return false;
}
for (int i = 0; i < str.length(); i++) {
if(!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}就我个人而言,选项2是最好的,但您的说明似乎暗示您需要迭代字符值
发布于 2016-11-10 11:42:21
只要检查Integer.parseInt是否抛出异常即可。
try {
Integer.parseInt(string);
} catch (NumberFormatException e) {
return false;
}
return true;发布于 2016-11-10 12:32:33
以上所有的解决方案在我看来都是正确的,但我想再给出一个解决这个问题的方案。您也可以使用ASCII值进行检查:
private Boolean IsInteger(String str)
{
int length = str.length(),c=0;
if(length==0)
return false;
for(int i=0;i<length; i++)
{
c = (int)str.charAt(i)-48;
if(!(c>=0 && c<10))
return false;
}
return true;
}我认为我的解决方案要好得多,因为它每次迭代使用的库函数数量更少。
我不会检查负值,因为在问题中,如果所有字符都是数字,则字符串是整数。如果要检查负数,可以通过在i==0;中添加一个条件来实现。
https://stackoverflow.com/questions/40519580
复制相似问题