8. String to Integer (atoi)

本文详细解析了一种将字符串转换为整数的方法。通过去除前导空格、判断符号位并逐位转换数字字符,实现了有效且准确的转换过程。讨论了边界条件处理及越界情况下的解决方案。

Implement atoi to convert a string to an integer.


首先检查字符串开头是否是空格,若是空格则忽略;

接着检查是否有正负号,正负号最多只能出现一个;

其次是检查后面是不是数字,若是数字则进行转换,越界的返回临界值;

若出现的不是数字,则返回已检测到的数字即可.


 public int myAtoi(String str) {
        long result=0;
        str=str.trim();
        int len=str.length();
        int flag=1;
        int f1=0;
        for(int i=0;i<len;i++){
            if(str.charAt(i)=='-'&&f1==0){
                flag=-1;
                f1=1;
            }
            else if(str.charAt(i)=='+'&&f1==0){
                f1=1;
                flag=1;
            }
            else if(str.charAt(i)>='0'&&str.charAt(i)<='9'){
                result=result*10+(str.charAt(i)-'0');
                if(result>Integer.MAX_VALUE){
                    if(flag==1)//越界之后返回最大值或最小值
                        return Integer.MAX_VALUE;
                    else
                        return Integer.MIN_VALUE;
                }
                   
            }else //输入非数字字符,直接返回0
                return (int)result*flag;
                
        }
    
        return (int)result*flag;
    }

上述实现复杂化了,因为数字的出现顺序肯定是符号在前面,因此更换版本如下:

public int myAtoi(String str) { 
        int flag=1; 
        int i=0; 
        long result=0; 
        int len=str.length(); 
        while(i<len&&str.charAt(i)==' ') 
            i++; 
        if(i<len&&str.charAt(i)=='-'){ 
            i++; 
            flag=-1; 
        } 
        else if(i<len&&str.charAt(i)=='+'){ 
            i++; 
            flag=1; 
        } 
        while(i<len&&str.charAt(i)>='0'&&str.charAt(i)<='9'){ 
            result=result*10+(str.charAt(i)-'0'); 
            if(result>Integer.MAX_VALUE){ 
                return flag==1?Integer.MAX_VALUE:Integer.MIN_VALUE; 
            } 
            i++; 
        } 
        return (int)result*flag; 
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值