思路:问题比较简单,主要是考察细节能力,在编写代码过程中或之后,应该尽量考虑到所有可能的输入,例如:
(1)输入为空、长度为零的“”、空格“ ”。
(2)输入为带有正负号的数字“+123456789”,如果带两个符号呢“++1”,应该判错。
(3)输入数字太大 or 太小,导致越界。这个问题在剑指offer的解决方法是使用long类型先保存结果,然后判断越界,但是如果输入的是一个超级无敌长的字符串呢,甚至long都存不下。本博客暂时使用的是long的方法,但是这里潜在的问题依然指出。
(3)的解决思路暂定:设置int最大 or 最小整数十进制的字符串格式,然后逐位比较,效率低一些,但是可以解决。
(4)输入0与输入错误的输出结果相同,但是小细节,可以不用在意。剑指offer建议的是设置全局错误变量,牛客直接忽略了这个问题。
(5)字符串的任意位置出现了不适当的字符,比如在数字中间出现正负号、出现乱码等。
public static int StrToInt(String str) {
if(str==null||str.equals("")) return 0;
//变量定义
long answer=0;
boolean answerFlag=true;
char[] numbers=str.toCharArray();
int length=numbers.length;
long power=1;
if(numbers[0]=='-') answerFlag=false;
if(numbers[0]=='+'||numbers[0]=='-') numbers[0]='0';
for(int i=length-1;i>=0;i--){
if(numbers[i]<48||numbers[i]>57) return 0;
answer+=(numbers[i]-48)*power;
power*=10;
}
answer=answerFlag?answer:answer*(-1);
if(answer>0x7fffffff||answer<0x80000000) return 0;
return (int)answer;
}