String转为Int是一个比较常见的面试题,但是要写出严谨的代码,要考虑的细节还是很多。主要有以下几点:
1.String为空的时候;
2.String无法转换为有效的Int的时候(包含非数字字符的时候怎么区分);
3.String中包含’+‘或者’-‘的情况;
4.String只包含’+‘或者’-'的情况;
5.边界条件,最大正整数与最小负整数。
下面给出完整代码如下所示:
public class StringToIntUtils {
public enum Status{
Valid,Invalid
}
private static Status status = Status.Valid;
public static int StrToInt(String str){
status = Status.Valid;
long num = 0;
if(!TextUtils.isEmpty(str)){
int sign = 1; //标识正负
int index =0;
char[] arr = str.toCharArray();
if(arr[0] == '-'){
sign = -1;
index++;
}
if(arr[0] == '+'){
index++;
}
if(str.length()>index){
for (;index<arr.length;index++){
if(arr[index]<='9'&&arr[index]>='0'){
int number = charToInt(arr[index]);
num = num *10 +number*sign;
if(num<Integer.MIN_VALUE||num>Integer.MAX_VALUE){
num = 0;
status = Status.Invalid;
break;
}
}else {
num = 0;
status = Status.Invalid;
break;
}
}
}else {
num = 0;
status = Status.Invalid;
}
}else status = Status.Invalid;
return (int) num;
}
private static int charToInt(char cha){
return cha - '0';
}
}