atoi函數(shù)的實現(xiàn)-java
要求:輸入字符串,提取最前面的數(shù)字部分,并轉換為int型
示例:" -42 world" 輸出:-42
代碼思路: 先提取出-42,在轉換-42為int,并判斷范圍
public int myAtoi(String str){
//提取的數(shù)字字符串
StringBuilder output=new StringBuilder();
//返回的結果
int result=0;
//遍歷輸入
for(int i=0;i<str.length();i++){
char c=str.charAt(i);
//空格并且是一直是空格,跳過
if(c==' ' && (i==0 || str.charAt(i-1)==' ')){
continue;
}
//減號(并且是最左側出現(xiàn)的"-",其他"-"作為字符處理)或數(shù)字
else if ((c=='-' && (i==0 || str.charAt(i-1)==' ')) || (c>='0' && c <='9')){
output.append(c);
}
//加號(并且是最左側的加號)
else if (c=='+' && (i==0 || str.charAt(i-1)==' ')){
continue;
}
//其他符號但两,結束提取
else{
break;
}
}
//轉換int過程
if(output.length()>0 ){
if(output.charAt(0)=='-'){
if(output.length()<=1){
//只有"-"
return 0;
}
//保留有效數(shù)字比如:-0000001轉換-1
while(output.length()>2 && output.charAt(1)=='0'){
output.deleteCharAt(1);
}
}else{
//保留有效數(shù)字
while(output.length()>1 && output.charAt(0)=='0'){
output.deleteCharAt(0);
}
}
//比較范圍,在int范圍內
if(output.length()<=9){
return Integer.parseInt(output.toString());
}
//可能超過int,但是不會超過long,借助long判斷
else if(output.length()<=11){
Long temp=Long.valueOf(output.toString());
if(temp>Integer.MAX_VALUE){
result=Integer.MAX_VALUE;
}
else if(temp<Integer.MIN_VALUE){
result=Integer.MIN_VALUE;
}else{
result=Integer.parseInt(output.toString());
}
}
//直接超過范圍
else{
if(output.charAt(0)=='-'){
result=Integer.MIN_VALUE;
}else{
result=Integer.MAX_VALUE;
}
}
}
return result;
}