String to Integer 算法学习

来源:互联网 发布:阿里云域名控制台 编辑:程序博客网 时间:2024/06/08 08:17

String to Integer

public int myAtoi(String str) {        if(str==null)return 0;        str=str.trim();//去空格        int len=str.length();        if(len==0)return 0;        char signal='+';        int singalNum=0;        int i=0;        char ch=str.charAt(i);        double result=0;        while(i<len)        {            ch=str.charAt(i);            if(ch=='-'||ch=='+')//判断符号            {                if(i!=0)return 0;//如果符号不在首位,返回0                if(ch=='-')signal='-';            }else if(ch>='0'&&ch<='9')            {                result=result*10+(str.charAt(i)-'0');//处理数字            }else if(ch<'0'||ch>'9')//遇到非数字字符,跳出循环,只计算非数字之前的合法数字字符            {                break;            }            i++;        }        if(signal=='-')        result=-1*result;        if(result>Integer.MAX_VALUE)return Integer.MAX_VALUE;        if(result<Integer.MIN_VALUE)return Integer.MIN_VALUE;        return (int)result;    }

以下是源码:

public static int parseInt(String s, int radix)                throws NumberFormatException    {        /*         * WARNING: This method may be invoked early during VM initialization         * before IntegerCache is initialized. Care must be taken to not use         * the valueOf method.         */        if (s == null) {            throw new NumberFormatException("null");        }        if (radix < Character.MIN_RADIX) {            throw new NumberFormatException("radix " + radix +                                            " less than Character.MIN_RADIX");        }        if (radix > Character.MAX_RADIX) {            throw new NumberFormatException("radix " + radix +                                            " greater than Character.MAX_RADIX");        }        int result = 0;        boolean negative = false;        int i = 0, len = s.length();        int limit = -Integer.MAX_VALUE;        int multmin;        int digit;        if (len > 0) {            char firstChar = s.charAt(0);            if (firstChar < '0') { // Possible leading "+" or "-"                if (firstChar == '-') {                    negative = true;                    limit = Integer.MIN_VALUE;                } else if (firstChar != '+')                    throw NumberFormatException.forInputString(s);                if (len == 1) // Cannot have lone "+" or "-"                    throw NumberFormatException.forInputString(s);                i++;            }            multmin = limit / radix;            while (i < len) {                // Accumulating negatively avoids surprises near MAX_VALUE                digit = Character.digit(s.charAt(i++),radix);                if (digit < 0) {                    throw NumberFormatException.forInputString(s);                }                if (result < multmin) {                    throw NumberFormatException.forInputString(s);                }                result *= radix;                if (result < limit + digit) {                    throw NumberFormatException.forInputString(s);                }                result -= digit;            }        } else {            throw NumberFormatException.forInputString(s);        }        return negative ? result : -result;    }
原创粉丝点击