剑指offer 把字符串转化成整数 java实现

题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述:
输入一个字符串,包括数字字母符号,可以为空

输出描述:
如果是合法的数值表达则返回该数字,否则返回0

示例1
输入
+2147483647
1a33

输出
2147483647
0

相关知识点:
在ASCLL码中字符‘0’ 对应的编码是 48(十进制),依次’1’对应49,‘1’ ~ ‘9’对应49 ~ 57,但是整数1就是等于1。
‘1’ - ‘0’ = 1,可以看做49 -48 =1;
同理‘7’ - ‘0’ =7 ,对应 58 -49= 7;
疑问: 为什么返回的是整型 不是字符?
要明白在ASCLL码表中’1’对应的是二进制,对应的二进制转对应十进制是49,‘-’这个操作是字符的二进制编码的相减,结果为二进制(计算机是以二进制进行存储),注意结果为二进制00000001就是十进制1,此时1是整型而不是字符(与ASCLL码已经无关了)

解题思路:

1.先判断第一位是不是符号位,如果有符号,有flag 做标记。
2.遍历字符串中的每个字符,如果存在非数字的字符,直接返回 0,否则,用当前字符减去’0’得到当前的数字,再进行运算。

if(str.length() == 0)
        	return 0;
        int flag = 0;//判断符号
        if(str.charAt(0) == '+')
        	flag = 1;
        else if(str.charAt(0) == '-')
        	flag = 2;
        int start = flag > 0 ? 1 : 0;
        
        long res = 0;
        while(start < str.length()) {
        	if(str.charAt(start) > '9' || str.charAt(start) < '0')
        		return 0;
        	res = res * 10 + (str.charAt(start) - '0');
        	start++;
        }
        return flag == 2? -(int)res : (int)res;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值