剑指offer-67:将字符串转换为整数

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

输入一个字符串,包括数字字母符号,可以为空。如果输入字符串为空直接返回0。若不为空,通过String类的toCharArray()将字符串转换为字符数组,然后从头遍历整个字符数组(一般默认为整数,如果第一个字符为‘-’,则说明为负数,最终转换为负数即可)。如果字符是数字,则通过 sum = sum * 10 + chars[i] - '0’来计算sum和。若字符为其它符号或字符,直接返回0。遍历完整个字符数组,若整个字符数组都是数字,最终返回sum * symbol即可(symbol代表正负)。

将sum定义为long类型,避免整形溢出问题。

代码如下:

public class offer67 {
    public static int toInt(String str) {
        //字符串为空
        if (str == null || str.length() == 0)
            return 0;
        char[] chars = str.toCharArray();
        //默认位正数
        int symbol = 1;
        // 如果第一位是'-',说明结果应该是个负数,
        if (chars[0] == '-')
            symbol = -1;
        //sum为long,避免结果溢出
        long sum = 0;
        for (int i = (chars[0] == '+' || chars[0] == '-') ? 1:0; i <chars.length; i++)
        {
            // 如果不是数字,而是其他字母符号一类非数字字符,则直接返回0
            if (chars[i] < '0' || chars[i] > '9')
                return 0;
            else
                sum  = sum * 10 + chars[i] - '0';
        }
        //强制转换
        return (int)(sum * symbol);
    }
    public static void main(String[] args){
        String  str="123a";
        System.out.println(toInt(str));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值