剑指offer --- 将字符串转换为整数(Java)

题目描述:

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

输入描述:

输入一个字符串,包括数字字母符号,可以为空

输出描述:

如果是合法的数值表达则返回该数字,否则返回0

示例1

输入

+2147483647
1a33

输出

2147483647
0

代码实现(一):

(1)将字符串转为字符数组;

(2)从数组最后一个字符开始向前遍历,判断是否符合条件,转化为整数;

(3)第一个元素需要单独判断,进行正负号的判断;

(4)得到的数据还要进行越界判断。

public static int StrToInt01(String str){
        if(str==null || str.length()==0){
            return 0;
        }

        char[] chars = str.toCharArray();
        int result = 0;
        int len = chars.length;
        int n = 0;

        for (int i = len-1,j = 0; i > 0; i--, j++) {

            n = (int)chars[i];  //字符的ASCII码值
            if(n<48||n>57){
                return 0;
            }

            result += (n-48)*Math.pow(10,j);
        }

        n = (int)chars[0];
        if(n>=48&&n<=57){
            result += (n-48)*Math.pow(10,len-1);
        }

        //判断是越界
        if ((result>Math.pow(2,31)-1)||(result<(-Math.pow(2,31)))){
            return 0;
        }else if(n==45){
            return -result;
        }

        return result;

    }

代码实现(二)

public static int StrToInt02(String str){

        if(str==null||str.length()==0){
            return 0;
        }

        int len = str.length();
        int s = 1;
        char[] chars = str.toCharArray();
        int result = 0;

        if(chars[0]=='-'){
            s = -1;
        }

        for(int i = (chars[0]=='-'||chars[0]=='+')?1:0; i < len; i++){
            if(chars[i]<'0'||chars[i]>'9'){
                return 0;
            }

            result = (result<<1) + (result<<3) + (chars[i] & 0xf);
        }

        return result * s;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值