独立实现字符串转Integer

作者分享了小米面试经历,被问及如何手动将String类型转换为Int类型而不使用内置函数。文章提供了详细的解决方案,包括处理正负号、边界值、越界情况等,并附带了一个Java实现示例。

       昨天小米面试,一个女大神把我带进去的,刚开始以为是HR,随便聊了几分钟,突然问我技术问题,把我也是吓了一跳。第一个问题是手写代码实现String转Int,不能使用IntegerPrase方法。思考了一下想起来使用ASCII值进行比对,也就是‘A-Z’和‘1-9’都有自己的ASCII。主要判断字符串里面的char是不是‘0’,‘9’之间的。当时只顾考虑这个了,没有考虑边界值,数字越界(int 为2的32次方),字符串是不是为空,,是不是含有正负符号,是不是包含非0-9之间的char等细节问题。不要和面试官争执,讨论一个多线程相关的关键词,我的理解错了,然后打电话问HR另一个面试安排,HR问我是不是和面试官发生冲突了,突然感觉很莫名其妙,唉,一面就PASS。

/**
 * Created by lang on 17/8/2.
 */

public class Test {

    public static void main(String[] arg) {
        int test = str2Integer("35241");

    }

    public static int str2Integer(String str) {
       
        int index = 0;
        // 标记是正数还是负数
        int sign = 1;
        int total = 0;
        char ch;
        if (str.trim().length() == 0) {
            return 0;
        }
        //  判断正负
        if (str.charAt(index) == '+' || str.charAt(index) == '-') {
            if (str.charAt(index) == '+')
                sign = 1;
            else {
                sign = -1;
            }
            index++;
        }
        while (index < str.length()) {
            ch = str.charAt(index);
            if (ch < '0' || ch > '9')
                break;
            if (Integer.MAX_VALUE / 10 < total || Integer.MAX_VALUE / 10 ==
                    total && Integer.MAX_VALUE % 10 < (ch - '0'))
                return sign == 1 ? Integer.MAX_VALUE : Integer.MIN_VALUE;
            total = total * 10 + (ch - '0');
            index++;
        }
        return sign * total;
    }


}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值