题目描述
将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
输入描述
输入一个字符串,包括数字字母符号,可以为空
输出描述
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647
1a33
输出
2147483647
0
解题思路
主要分成三种情况(不包含为null或length为0):
(1)若为负数,则最后要带上负号,输出为负数;
(2)若为正数,则正常输出;其中,字符0对应48,9对应57,即范围应该 [48, 57]
(3)若含有非法字符(>57 或 <48),则返回0。
代码实现
public class Solution {
public int StrToInt(String str) {
if (null == str || 0 == str.length()) {
return 0;
}
char[] chars = str.toCharArray();
int mark = 0;
int number = 0;
if ('-' == chars[0]) {
mark = 1;
}
for (int i = mark; i < chars.length; i++) {
if ('+' == chars[i]) {
continue;
}
if (chars[i] < 48 || chars[i] > 57) {
return 0;
}
number = number * 10 + chars[i] - 48;
}
return 1 == mark ? -number : number;
}
}