Double.parseDouble(String str)
能把一个String类型的变量转换为Double类型,而且利用抛出的异常我们还可以很好的处理无法转换的字符串,故其非常适合做atoi,而之所以不用Integer.parseInteger是因为我们可能会遇到浮点数,这时候
Integer.parseInteger就没办法处理了(题目要求我们转换为整形)。
具体代码如下:
public class TurnInt {
public static int myAtoi(String str) {
boolean flag=true;//此flag用来判断是否需要判断第一个字符是不是字母,若取得第一个属于0-9,或者'-','+','.'字符后则为false
boolean flag1=false;//此flag用来判断在数字后是否有非数字的字符,若有则直接break.若取得第一个属于0-9,或者'-','+','.'字符后则为true
double a=0;//存放结果
String res="";//存放待转换字符
//遍历输入的str
for(int i=0;i<str.length();i++){
char c=str.charAt(i);
//若字符属于0-9,或者'-','+','.'等则把其加入到带转换字符串中
if((c>='0'&&c<='9')||c=='-'||c=='+'||c=='.'){
if(flag1&&(c=='+'||c=='-')) break;
res+=c;
//取得第一个属于0-9,或者'-','+','.'字符后设置flag
flag=false;
flag1=true;
}else if(flag&&c!=' '){
//判断第一个非空字符是否属于0-9,或者'-','+','.'
return 0;
}else if(flag1){
//检测是否在数字后遇到不属于0-9,或者'-','+','.'字符
break;
}
}
try {
a=Double.parseDouble(res); //利用Double封装类进行转换
a=(int)a; //转回int以便返回
//判断是否溢出
if(a>2147483647){
a=2147483647;
}
if(a<=-2147483648){
a=-2147483648;
}
}catch (Exception e){
//若存在无法转换字符则捕获异常输出0,如‘+’,‘.+’等
return 0;
}
return a;
}
}