atoi的java实现

atoi是字符串转换到整形的函数,用java如何实现呢?看起来简单,陷阱很多,在leetcode网站,这个函数能够写得完全正确的概率只有14%。


atoi的需求是这样的:

  1. 如果前面有空格,需要剔除空格;

  2. 剔除空格后,第一个字符串如果是+号,认为是正数;如果是-号,认为是负数;

  3. 后面的字符如果不是数字,那么返回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;

}

}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值