这个题挺有意思的,同时也有很多坑,注意题目是返回一个整数,而非长整数,所以用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; }