请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。 该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可
public static int myAtoi(String str) { if (str == null || str.length() == 0||str.trim().length()==0) { return 0; } str = str.trim();//去除空格 char flag = str.charAt(0); int start = 0; int sign = 1; if (flag == '+') { sign = 1; ++start; }else if (flag == '-') { sign = -1; ++start; }else if(!Character.isDigit(str.charAt(0))){ return 0; } long result = 0; char[] chars = str.toCharArray(); long res=0; for (int i = start; i < chars.length; i++) { if (Character.isDigit(chars[i])) { result = result*10 +chars[i]-'0'; if(res>result){//判断溢出的情况 result=sign>0?Integer.MAX_VALUE:Integer.MIN_VALUE; return (int)result; } res=result; if(result<0&&sign*result<0){ return Integer.MAX_VALUE; }else if(result<0&&sign*result>0){ return Integer.MIN_VALUE; } }else{ break; } } if (sign*result > (Math.pow(2, 31)-1)) { return Integer.MAX_VALUE; } if ( sign*result < (-1*Math.pow(2, 31))) { return Integer.MIN_VALUE; } return sign*(int)result; }