把 字符串转换为整数的算法

public class StringToInteger {
//定义一个全局变量,用来表示此输出是否异常
private int flag=0;//flag=0是正常,falg=1是异常
public int myAtoi(String str) {
//(1)判断字符串为空,或者是""的情况,str=null,str.length()在运行时会报错
if(str==null||str.length()==0){
flag=1;
return 0;

}

int num=0;//定义一个数值记录result被记录的次数,
int result=0;//用来存储字符串转换为整数的结果;
int zf=1;//用来表示当前数字是正数还是负数

int index=0;//用来表示正负号的个数,超过一个则报异常

for(int i=0;i<str.length();i++){//“ ”写在“+”前面不会报错,但写在其后面就视为异常

if(str.charAt(i)=='+'||str.charAt(i)=='-'){//如果是正负号,判断正负号的个数超过1了吗
if(index>=1||num>0){//如果"++13"或者"13+14"即出现多次正负号或者正负号在数据中,返回“+”之前的结果
flag=1;
return result;
}
else{
if(str.charAt(i)=='-'){
zf=-1;
}
index++;
continue;//跳出本次循环进行下一次
}
}
if(str.charAt(i)==' '){//如果是空格
if(index!=0||num>0){//如果空格在数字或者正负号之间"+ 003" 或者 "8  9"则报异常,return  ' '之前的数字
flag=1;
return result;
}else{
continue;//如果空格的出现正常,则进行下次循环
}
}
//经过上面的处理,留下来的是0到9的整数还有非法字符
//如果出现特殊字符非 (1)"+" (2) "-" (3)" "(4) "12345"则报异常
int temp=str.charAt(i)-'0';
    if(temp>9||temp<0){//如果是非(1)"+" (2) "-" (3)" "(4) "12345"这些字符则报异常,返回特殊字符之前的结果
    flag=1;
    return result;
   
    }else{
    if(result>Integer.MAX_VALUE/10||(result==Integer.MAX_VALUE/10&&temp>Integer.MAX_VALUE%10))//考虑数据超过整数范围的情况
    {
    result=Integer.MAX_VALUE;
    flag=1;//超出整数的上限则以上限为准
    return result;
   
    }//超出整数的下限,则以下限为准
    if(result<Integer.MIN_VALUE/10||(result==Integer.MIN_VALUE/10&&temp>(Integer.MIN_VALUE%10)*(-1))){
    result=Integer.MIN_VALUE;
    flag=1;
    return result;
   
    }
    if(zf<0){//如果是负数
    result=10*result-temp;
    }else{
    result=10*result+temp;
    }
    num++;
   
    }
}

return result;

}

要考虑的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值