题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
public class StringToInt {
private boolean gInvlid=false;//全局变量判断是非法输入返回0还是输入0返回的0
public int StrToInt(String str) {
gInvlid=false;
int num=0;
if(str!=null && !str.equals("")){//如果不为空
boolean isMinus=false;//标记数的正负
if(str.charAt(0)!='-' && str.charAt(0)!='+')
{
num=StrToIntCore(str, isMinus);//开始没有符号位
return num;
}
if(str.charAt(0)=='-')//如果炜负数,标记为真
isMinus=true;
if(str.length()>1 && str.charAt(1)!='\0'){
num=StrToIntCore(str.substring(1),isMinus);//开始有符号位
}
}else//如果为空,返回0,输入非法
this.gInvlid=true;
return num;
}
private int StrToIntCore(String str, boolean isMinus) {
int num=0;
int len=str.length();
for(int i=0;i<len;i++){
if(str.charAt(i)>='0' && str.charAt(i)<='9'){//字符是不是数字
int flag=isMinus?-1:1;
num=num*10+flag*(str.charAt(i)-'0');
if((!isMinus && num>0x7FFFFFFF) || (isMinus && num<0x80000000)){//是不是溢出
num=0;
break;
}
}else{
num=0;
this.gInvlid=true;
break;
}
}
return num;
}
public static void main(String[] args){
String str="123";
StringToInt s=new StringToInt();
System.out.print(s.StrToInt(str));
}
}