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;//用来表示当前数字是正数还是负数
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;
//定义一个全局变量,用来表示此输出是否异常
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;
}
要考虑的