1. 程式人生 > >把字串轉換成整數 java實現

把字串轉換成整數 java實現

題目描述

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

輸入描述:

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

輸出描述:

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

輸入

+2147483647
    1a33

輸出

2147483647
    0
這道題目看起來很簡單,卻是一道經常考的面試題,主要考察學生對於異常輸入的考慮是否全面。

解題思路:就是需要考慮正負數,考慮輸入的字元都是0-9的,此外還需要考慮是否溢位了,整數的範圍還記得嗎?-2147483648~2147483647,但是在這道題不用去記住這個範圍,怎麼判斷一處,比如說給你一個字串“+1221312”,是一個整數,那麼對於這個正數溢位的情況必然是一個負數,這種時候是必定溢位了。

直接看程式會比較明白:

    public static int StrToInt(String str) {
        int len = str.length();
        if(len == 0) return 0;
        int index = 0;
        boolean minus = false;
        if (str.charAt(0) == '+') {
       	 index++;
        } else if(str.charAt(0) == '-') {
       	 minus = true;
       	 index++;
        } 
        if(index != 0 && len == 1) {//萬一只有一個正負號符號,而沒有數字的情況要格外注意啊 !!!
        	return 0;
        }
        int num = StrToInt(str, index, minus);
        if(num != 0) num = minus ? num*(-1) : num;
        return  num;
    }
    
    public static int StrToInt(String str,int index,boolean minus) {
    	int result = 0;
    	int len = str.length();
    	for(int i = index; i < len; i++) {
    		if(str.charAt(i) >= '0' && str.charAt(i)<= '9') {//各個位置上的字元是否合格
    			result = result*10;
    			result += str.charAt(i)-'0';//累加的過程,從高位到低位
        		if((minus && (result*-1) > 0) || (!minus && (result < 0))) {//溢位時就是原來是正數,加著加著變成了負數,或者原來是負數加著加著變成了正數
        			result = 0; 
        			break;
        		}
    		} else {
    			result = 0;
    			break;
    		}
    	}
    	return result;
    }