题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0
代码
由于代码的注释充足,因此不写思路解析了,直接看代码懂得更快。
public class Solution {
public int StrToInt(String str) {
if(str.length()==0) return 0;
char[] ch = str.toCharArray();
//第一个字符可以是正号或者是负号
int first = 1;//做符号位,1为+,2为-
int index = 0;//防止出现123这种开始就不是符号位的数字
if(ch[0] == '-'){
//如果是负号且字符串长度不小于1,将符号位置-1
first ++;
index++;
}
if(ch[0] == '+'){
//如果是符号为正号且字符串长度不小于1,将符号位置+1
index++;
}
//在存在符号位的情况下,确定不能只有一个符号位
if(first!=0&&str.length()==1 ) return 0;
int result = 0;
for(int i = index;i<ch.length;i++){
if(ch[i]<'0'||ch[i]>'9'){
//如果后面的不在0-9的话,说明不是数字
return 0;
}
result = result * 10 + (int)(ch[i]-'0');//-‘0’转换为数字
}
if(first == 2) {
return result*(-1);
}else{
return result;
}
}
}