转换字符串到整数——LintCode

实现atoi这个函数,将一个字符串转换为整数。如果没有合法的整数,返回0。如果整数超出了32位整数的范围,返回INT_MAX(2147483647)如果是正整数,或者INT_MIN(-2147483648)如果是负整数。

样例

"10" =>10

"-1" => -1

"123123123123123" => 2147483647

"1.0" => 1


*************************************************

简直了……各种没想到的数据,代码很乱……水过去的

public class Solution {
    /**
     * @param str: A string
     * @return An integer
     */
    public int atoi(String str) {
        // write your code here
        if(str == null)
			return 0;
		//合法
		str = str.trim();
		int num = 0,flag = 0;
		StringBuffer sb = new StringBuffer();
		for(int i=0;i<str.length();i++)
		{
			char c = str.charAt(i);
			if(c >= '0' && c <= '9' || c == '.' || (c == '-' || c== '+'))
			{
				if(c >= '0' && c <= '9')
					flag = 1;
				if((c == '-' || c == '+') && i!=0)
					break;
				sb.append(c);
			}
			else if(flag == 1) {
				break;
			}
			if(c == '.')
				num++;
		}
		if(num > 1 )
			return 0;

		str = sb.toString();
		if(str.length() == 0 || (str.length() == 1 && (str.equals("+")||str.equals("-"))))
			return 0;
		if(num == 1)
		{
			String[] s = str.split("\\.");
			str = s[0];
		}
		if(str.charAt(0) == '-')
		{
			if(str.length() < 11)
				return Integer.parseInt(str);
			if(str.length() > 11)
				return Integer.MIN_VALUE;
			String s = str.substring(1, str.length()-1);
			String s_ = str.substring(str.length()-1,str.length());
			int x = Integer.parseInt(s);
			if(x > 214748364 || (x == 214748364 && Integer.parseInt(s_)>7))
				return Integer.MIN_VALUE;
			x = Integer.parseInt(str);
			return x;
		}
		else{
			if(str.length() < 10)
				return Integer.parseInt(str);
			if(str.length() > 10)
				return Integer.MAX_VALUE;
			String s = str.substring(0, str.length()-1);
			String s_ = str.substring(str.length()-1,str.length());
			int x = Integer.parseInt(s);
			if(x > 214748364 || (x == 214748364 && Integer.parseInt(s_)>7))
				return Integer.MAX_VALUE;
			x = Integer.parseInt(str);
			return x;
		}
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值