这个题挺有意思的,同时也有很多坑,注意题目是返回一个整数,而非长整数,所以用int足矣。
躺坑经验:(解题思路使用字符的ascii值进行数值的区间判断以及正负判断)
1.去除两端空白字符
2.去掉空白字符后,截断非0~9数字
3.判断首个字符是否为"+,-"符号
public int atoi (String str) {
byte[] bytes = str.trim().getBytes();
int value = 0;//返回值
//正负字符byte值
byte p = '+';
byte n = '-';
//0-9数字区间byte值
byte zero = '0';
byte nine = '9';
if(bytes.length == 0) return value;
//过滤掉非无用字符,并只用endIndex作为截断位
int endIndex = 1;
for (int i = 1; i < bytes.length; i++) {
//判断是否为0~9数字
if(bytes[i] < zero||bytes[i] > nine) {
endIndex = i;
break;
}
endIndex = i + 1;
}
//判断过滤后的值是否为空
if(endIndex == 0) return value;
for (int i = 0; i < endIndex; i++) {
//如果第一个字符是正负符号,continue不做计算
if(i == 0 && (bytes[i] == p || bytes[i] ==n)) continue;
if(bytes[0] == n){//如果是正值-=
value -= (bytes[i] % zero) * Math.pow(10, endIndex - 1 - i);
}else{//否则+=
value += (bytes[i] % zero) * Math.pow(10, endIndex - 1 - i);
}
}
return value;
}
京公网安备 11010502036488号