[LeetCode]利用Double类完成字符串转整数 (atoi)


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;
    }
}

 
 


猜你喜欢

转载自blog.csdn.net/fengdaqin/article/details/80259471