剑指offer第四十九题。

题目描述

将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。

解题思路

主要就是处理一下符号位,以及判断是否有非法字符,最后转换为整数即可。

我的答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
public class Solution {
public int StrToInt(String str) {
//1.判断是否为空
if(str.trim().length() == 0 || null == str){
return 0;
}
//2.只有一个元素的情况
if(str.trim().length() == 1){
char c = str.toCharArray()[0];
if(c >= '0' && c <= '9'){
return c-'0';
}else{
//不是数字的话,那肯定是非法的了
return 0;
}
}
//3.下面长度都大于1,先拿到首位的符号看是不是负数,是的话记录一下
char[] ch = str.toCharArray();
boolean isMinus = false;
if(ch[0] == '-'){
isMinus = true;
}

//4.逐个判断,合法则拼接为一个整数
int res = 0;
for(int i= 0;i < ch.length;i++){
if(i == 0 && (ch[i] == '+' || ch[i] == '-')){
continue;
}else if(ch[i] < '0' || ch[i] > '9'){
return 0;
}else{
res = 10 * res + (ch[i]-'0');
}
}

return isMinus ? -res : res;
}
}