把字串轉換成整數 java實現
阿新 • • 發佈:2019-01-26
題目描述
將一個字串轉換成一個整數,要求不能使用字串轉換整數的庫函式。 數值為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; }