題目
將一個字符串轉換成一個整數,要求不能使用字符串轉換整數的庫函數。 數值爲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;
}
}