劍指offer——把字符串轉換成整數

題目

將一個字符串轉換成一個整數,要求不能使用字符串轉換整數的庫函數。 數值爲0或者字符串不是一個合法的數值則返回0

輸入描述:

輸入一個字符串,包括數字字母符號,可以爲空

輸出描述:

如果是合法的數值表達則返回該數字,否則返回0

解題,本題大意是將字符串轉化爲整數,聽着很簡單,但是其中有諸多的坑。
首先,需要判斷輸入的是否合法,如果不合法直接返回0。
第二,需要判斷一個字符代表的是正數還是負數。
第三,防止整數的越界。整數的範圍爲(-2^31, 2^31-1)

public class Solution {
    public int StrToInt(String str) {
        
        if(str == null || str.length() == 0){
            return 0;
        }
        // 默認是正數
        boolean positive = true;
        int len = str.length();
        int i = 0;
        // 標記第一個字符是否是正負號,並且標記正負性
        if(str.charAt(i) == '-'){
            positive = false;
            i++;
        }else if(str.charAt(i) == '+'){
            i++;
        }
        long result = 0L;
        while(i < len){
            if(str.charAt(i)>= '0' && str.charAt(i)<='9'){
                result = result * 10 + (str.charAt(i)-'0');
                i++;
            }else{
                result = 0;
                break;
            }
        }
        
        // 判斷是否越界,如果越界直接返回0
        if((positive&&result>Integer.MAX_VALUE) || (!positive&&(0-result)<Integer.MIN_VALUE)){
            return 0;
        }
        
        if(!positive){
            result = 0 - result;
        }
        
        return (int)result;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章