把字符串转换成整数

思路:问题比较简单,主要是考察细节能力,在编写代码过程中或之后,应该尽量考虑到所有可能的输入,例如:

(1)输入为空、长度为零的“”、空格“ ”。

(2)输入为带有正负号的数字“+123456789”,如果带两个符号呢“++1”,应该判错。

(3)输入数字太大 or 太小,导致越界。这个问题在剑指offer的解决方法是使用long类型先保存结果,然后判断越界,但是如果输入的是一个超级无敌长的字符串呢,甚至long都存不下。本博客暂时使用的是long的方法,但是这里潜在的问题依然指出。

    (3)的解决思路暂定:设置int最大 or 最小整数十进制的字符串格式,然后逐位比较,效率低一些,但是可以解决。

(4)输入0与输入错误的输出结果相同,但是小细节,可以不用在意。剑指offer建议的是设置全局错误变量,牛客直接忽略了这个问题。

(5)字符串的任意位置出现了不适当的字符,比如在数字中间出现正负号、出现乱码等。

    public static int StrToInt(String str) {
        if(str==null||str.equals("")) return 0;

        //变量定义
        long answer=0;
        boolean answerFlag=true;
        char[] numbers=str.toCharArray();
        int length=numbers.length;
        long power=1;

        if(numbers[0]=='-') answerFlag=false;
        if(numbers[0]=='+'||numbers[0]=='-') numbers[0]='0';

        for(int i=length-1;i>=0;i--){
            if(numbers[i]<48||numbers[i]>57) return 0;
            answer+=(numbers[i]-48)*power;
            power*=10;
        }

        answer=answerFlag?answer:answer*(-1);
        if(answer>0x7fffffff||answer<0x80000000) return 0;
        return (int)answer;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值