剑指Offer:把字符串转换成整数

本文介绍了一种不使用库函数将字符串转换为整数的方法。首先去除字符串首尾空格,判断符号位,然后逐字符解析并计算整数值,同时检查上溢和下溢情况,避免返回非法数值。

题目

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。

思路

先去掉前后空格,然后对符号位做一下判断就很简单了。需要注意的是进行判断上溢和下溢的情况。
这里比较坑的一点是java的整型字面值字面值默认是int类型,因此0x80000000等于-2147483648,与long进行比较的时候会类型提升,然而这并不改变其符号位,依然是-2147483648。因此必须要在字面值后面加上一个L显式地将其定义为long类型。

代码:

public class Solution {
    public int StrToInt(String str) {
        str = str.trim();
        if(str.length()==0)
            return 0;
        boolean isNeg = false;
        long value=0;
        for(int i=0;i<str.length();i++){
            char cur = str.charAt(i);
            if(cur>='0'&&cur<='9'){
                value=value*10+cur-'0';
                if(isNeg&&value>0x80000000L||
                !isNeg&&value>0x7fffffffL)
                    return 0;
            }
            else{
                if(i==0&&cur=='+')
                    isNeg=false;
                else if(i==0&&cur=='-')
                    isNeg=true;
                else
                    return 0;
            }
        }
        return (int)(isNeg?-1*value:value);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值