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

来源:互联网 发布:淘宝文胸买家秀 编辑:程序博客网 时间:2024/05/29 10:27
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;

}

要考虑的

0 0