題目
將一個字符串轉換成一個整數,要求不能使用字符串轉換整數的庫函數。 數值爲0或者字符串不是一個合法的數值則返回0。
思路
先去掉前後空格,然後對符號位做一下判斷就很簡單了。需要注意的是進行判斷上溢和下溢的情況。
這裏比較坑的一點是java的整型字面值字面值默認是int類型,因此0x80000000等於-2147483648,與long進行比較的時候會類型提升,然而這並不改變其符號位,依然是-2147483648。因此必須要在字面值後面加上一個L顯式地將其定義爲long類型。
代碼:
public class Solution {
public int StrToInt(String str) {
str = str.trim();
if(str.length()==0)
return 0;
boolean isNeg = false;
long value=0;
for(int i=0;i<str.length();i++){
char cur = str.charAt(i);
if(cur>='0'&&cur<='9'){
value=value*10+cur-'0';
if(isNeg&&value>0x80000000L||
!isNeg&&value>0x7fffffffL)
return 0;
}
else{
if(i==0&&cur=='+')
isNeg=false;
else if(i==0&&cur=='-')
isNeg=true;
else
return 0;
}
}
return (int)(isNeg?-1*value:value);
}
}