把字符串转换成整数

Posted by DH on July 23, 2017

题目

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0

分析

其实这个不涉及到算法,主要是对输入的合法性的检查和转化过程中,是否越界或者溢出。

具体来说,有如下要求:

(1)输入是否为null

(2)输入字符串的长度是够为0

(3)输入的字符串的第一个字符是-、+或者没有正负号

(4)Java的正数的最大值是2^32 - 1,负数的最小值是2^31。

(5)每一个字符是否属于0-9之间。

综上分析:

代码

	public int StrToInt(String str) {
		// 字符串为空
        if (str == null || str.length() == 0 || str.equals("")) {
			return 0;
		}
        
        // 记录符号位,0是正数,1是负数,默认设置为正
        int fuhao = 0;
        int start = 0;
        char [] chars = str.toCharArray();
        if (chars[0] == '-') {// 带符号,符号是-
			fuhao = 1;
			start = 1;
		}else if(chars[0]=='+'){// 带符号,符号是+
			fuhao = 0;
			start = 1;
		}else {//不 带符号,默认为+
			fuhao = 0;
			start = 0;
		}
        
        long result = 0;
        // 遍历数组,是数字的话就进行溢出校验,否则就输出0
        for(int i = start;i<chars.length;i++){
        	    char temp = chars[i];
        	    if (temp >='0' && temp <= '9') {
					result = result * 10 + temp -'0';
				
					if ((fuhao == 0&&result > Integer.MAX_VALUE)  || (fuhao == 1 &&result <Integer.MIN_VALUE)) {
						   return 0;
					}
					
				}else{
					return 0;
				}
        	
        }
        
       return (int) (fuhao == 1?(int)(-1)*result : (int)result);
        
    }