Java中判断是否为数字的函数:
筛选条件
- 排除开头空字符
- 是否到达末尾
- 开头字符是否为正负号
- 后是否紧跟数字
-
是否非字母
- 非数字开始无效,返回零
- 数字开始计数是否溢出不能使用long
判断溢出会借助INT.MAX_VALUE()这个函数但是不能赋值给一个int 变量;
-
结果为正还是负
每一次都需要判断是否超过数组边界
Characater.isDigital(字符);
处理越界
sum = sum*10+digit;
这里*10 和+digit都会造成溢出,解决办法:
1、计算之前先判断此时的结果是否溢出
if(ans>(INT.MAX_VALUE()-digit)/10){
return 0;
}
else {
}
正负号处理
若需要判断正负号之后是否紧跟数字,则会出现如下代码。
if(newstr[index]=='-'){
if(Characater.isDigit(newchar[index])){
flag = -1;
index++;
}
}else if(newstr[index]=='+'){
index++;
if(Characater.isDigit(newchar[index])){
flag =1;
index++;
}
}
改进
其后不是字母,则是下一次循环判断的事,无需落到本次循环情况:
if(newstr[index]=='-'){
flag = 0;
index++;
}else if(newstr[index]=='+'){
flag =1;
index++;
}else if(!Character.isDigit(newstr[index]){
index++;
}
//符号会被覆盖也就是更新,+jfda-1234结果可以是负数
编译问题
Integer.MAX_VALUE
Integer.MIN_VALUE
样例
.1
- 一开始没有仔细看样例输出,这里只需要在遇到一个非数字开始的字符串返回即可,而不是寻找字符串中的数字。
结果溢出
- 判断出sum有可能溢出时则可以进行返回 Integer.MAX_VALUE或者是Integer.MIN_VALUE
总结
- 题目需要更仔细的阅读尤其是样例
- 判断的条件需要更简略有效