leecode:第八题:8. 字符串转整数 (atoi)

该函数首先根据需要丢弃任意多的空格字符,直到找到第一个非空格字符为止。如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值。如果第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

字符串可以在形成整数的字符后面包括多余的字符,这些字符可以被忽略,它们对于函数没有影响。

当字符串中的第一个非空字符序列不是个有效的整数;或字符串为空;或字符串仅包含空白字符时,则不进行转换。

若函数不能执行有效的转换,返回 0。

代码:

public static void main(String[] args) {
        String ss = "    +0 010 ";
        System.out.println(myAtoi(ss));
    }

    public static int myAtoi(String str) {
        String string = "";
        str = str.trim();
        int flag = 0;
        if (str.equals("") || str.length() == 0) {
            return 0;
        }
        if (str.charAt(0) == '+') {
            str = str.replaceFirst("[+]", "");
        } else if (str.charAt(0) == '-') {
            str = str.replaceFirst("[-]", "");
            flag = 1;
        } else if (str.charAt(0) < '0' && str.charAt(0) > '9') {
            return 0;
        }

        str = str.trim();

        int len = 0;
        while (len < str.length()) {
            if (Character.isDigit(str.charAt(len))) {
                string = string + str.charAt(len);
            } else {
                break;
            }
            len++;
        }
        string = clearZero(string);
        if (string.equals("") || string.length() == 0) {
            return 0;
        }
        if (string.length() > 10) {
            string = string.substring(0, 11);
        }
        long rr = Long.parseLong(string);
        if (flag == 1) {
            rr = -rr;
        }
        if (rr >= Integer.MAX_VALUE) {
            return Integer.MAX_VALUE;
        } else if (rr <= Integer.MIN_VALUE) {
            return Integer.MIN_VALUE;
        } else {
            return (int) rr;
        }

    }

    public static String clearZero(String aString) {

        String newStr = aString.replaceFirst("^0*", "");
        return newStr;

    }

}
 

你可能感兴趣的:(leecode:第八题:8. 字符串转整数 (atoi))