思路要全面, 多考虑代码的鲁棒性

空指针,空串,符号,溢出

测试用例:

  • 功能测试(正数 负数 和0)
  • 边界测试(最大正整数,最小负整数)
  • 特殊输入测试(NULL,”“,字符串中有特殊字符)
public class Solution
{
    /**
     * 注意检测空指针 空串"" 正负号 溢出
     * @param str
     * @return
     */
    public int StrToInt(String str)
    {
        //异常值检测
        if(str==null || str.length()<=0)
        {
            return 0;
        }

        boolean isPositive = true;
        int index=0;
        int number=0;
        if(str.charAt(index)=='+')
        {
            isPositive=true;
            index++;
        }
        else if (str.charAt(index)=='-')
        {
            isPositive=false;
            index++;
        }

        //判断是否只有'+'或者'-'
        if(index>=str.length())
        {
            return 0;
        }

        //处理字符串中的数字
        while(index<str.length())
        {
            if(str.charAt(index)>= '0' && str.charAt(index)<='9')
            {
                number = number*10 + str.charAt(index)-'0';
                index++;

                //考虑溢出情况
                if(number<Integer.MIN_VALUE || number>Integer.MAX_VALUE)
                {
                    return 0;
                }
            }
            else
            {
                return 0;
            }
        }

        if (isPositive==false)
        {
            number = -number;
        }

        return number;
    }

    public static void main(String[] args)
    {
        Solution s = new Solution();
        String str1 = "+";
        System.out.println(str1 + " : " + s.StrToInt(str1));
        String str2 = "+10";
        System.out.println(str2 + " : " + s.StrToInt(str2));
        String str3 = "-100";
        System.out.println(str3 + " : " + s.StrToInt(str3));
        String str4 = "10";
        System.out.println(str4 + " : " + s.StrToInt(str4));
        String str5 = "123";
        System.out.println(str5 + " : " + s.StrToInt(str5));
        String str6 = "111a2";
        System.out.println(str6 + " : " + s.StrToInt(str6));
        String str7 = "++";
        System.out.println(str7 + " : " + s.StrToInt(str7));
        String str8 = "";
        System.out.println(str8 + " : " + s.StrToInt(str8));
        String str9 = null;
        System.out.println(str9 + " : " + s.StrToInt(str9));
    }

}