字符串轉化為整數

將一個字符串轉換成一個整數,要求不能使用字符串轉換整數的庫函數。

  • 數值為0或者字符串不是一個合法的數值則返回0
public class StrToInt {
    private static boolean valid;
    public static int StrToInt(String str) {
       if (str == null ||str.length() == 0 || str.trim().equals("")) return 0;
       boolean isNegitive = false;
       //設置number為長整型,防止太大
       long number = 0;
       for (int i=0;i<str.length();i++){
           //如果第一個符號是正負號,符號改變變量,正號不用管
           if (i == 0 && (str.charAt(i) == '-' || str.charAt(i) == '+')){
               if (str.charAt(i) == '-'){
                   isNegitive = true;
               }
               //只有一個符號,失效
               if (str.length() == 1){
                   return 0;
               }
               continue;
           }
           //如果有一個符號不是數字,直接退出
           if (str.charAt(i) <'0' || str.charAt(i) > '9'){
               return 0;
           }
           //設置符號,得出結果
           int flag = isNegitive ? -1 : 1;
           //注意:直接在原有基礎上賦值,重新組合數字的技巧
           number = number*10 + flag*(str.charAt(i) - '0');
           //判斷常數的上下界限
           if ((!isNegitive && number > Integer.MAX_VALUE) || (isNegitive && number < Integer.MIN_VALUE)){
               return 0;
           }

       }
        valid = true;
        return (int) number;
    }


    public static boolean flag;
    public static int StrToInt1(String str) {
        flag = false;
        //判斷輸入是否合法
        if (str == null || str.trim().equals("")) {
            flag = true;
            return 0;
        }
        // symbol=0,說明該數為正數;symbol=1,該數為負數;start用來區(qū)分第一位是否為符號位
        int symbol = 0;
        int start = 0;
        char[] chars = str.trim().toCharArray();
        if (chars[0] == '+') {
            start = 1;
        } else if (chars[0] == '-') {
            start = 1;
            symbol = 1;
        }
        int result = 0;
        for (int i = start; i < chars.length; i++) {
            if (chars[i] > '9' || chars[i] < '0') {
                flag = true;
                return 0;
            }
            int sum= result * 10 + (int) (chars[i] - '0');


            if((sum-(int) (chars[i] - '0'))/10!=result){
                flag=true;
                return 0;
            }

            result=result * 10 + (int) (chars[i] - '0');
            /*
             * 本人認為java熱門第一判斷是否溢出是錯誤的,舉個反例
             * 當輸入為value=2147483648時,在計算機內部的表示應該是-2147483648
             * 顯然value>Integer.MAX_VALUE是不成立的
             */
        }
        // 注意:java中-1的n次方不能用:(-1)^n .'^'異或運算
        // 注意,當value=-2147483648時,value=-value
        result = (int) Math.pow(-1, symbol) * result;
        return result;
    }
    public static void main(String[] args) {
        System.out.println(StrToInt("123"));
        System.out.println(StrToInt("-12"));
        System.out.println(StrToInt("+12"));
        System.out.println(StrToInt("+")+ " "+ StrToInt.valid);
        System.out.println(StrToInt("0")+ " "+ StrToInt.valid);
        System.out.println(StrToInt("12345678901112")+ " "+ StrToInt.valid);
    }
}

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容