atoi是字符串转换到整形的函数,用java如何实现呢?看起来简单,陷阱很多,在leetcode网站,这个函数能够写得完全正确的概率只有14%。
atoi的需求是这样的:
-
如果前面有空格,需要剔除空格;
-
剔除空格后,第一个字符串如果是+号,认为是正数;如果是-号,认为是负数;
-
后面的字符如果不是数字,那么返回0,如果是数字,返回实际的数字。遇到不是数字的字符,转换结束。
public class Solution {
public int atoi(String str) {
//这里要小心,需要判断有效性
if(str==null || str.length() == 0)
{
return 0;
}
int nlen = str.length();
double sum = 0;
int sign = 1;
int j = 0;
//剔除空格
while(str.charAt(j) == ' ')
j++;
//判断正数和负数
if(str.charAt(j) == '+')
{
sign = 1;
j++;
}else if(str.charAt(j) == '-')
{
sign = -1;
j++;
}
for(int i=j;i<nlen;i++)
{
char current = str.charAt(i);
if(current >= '0' && current <= '9')
{
sum = sum*10 + (int)(current - '0');
}
else
{
break;//碰到非数字,退出转换
}
}
sum = sum*sign;
//这里要小心,需要判断范围
if (sum > Integer.MAX_VALUE) {
sum = Integer.MAX_VALUE;
} else if (sum < Integer.MIN_VALUE) {
sum = Integer.MIN_VALUE;
}
return (int)sum;
}
}