1. 程式人生 > >[LeetCode]利用Double類完成字串轉整數 (atoi)

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