题目需求:
输入一个字符串,输出对应的int值
特殊处理:
输入: null 输出:0
输入: "a122" 输出:0
输入: " 1233" 输出:1233
输入: " -123" 输出:-123
输入: "+123" 输出:123
输入: " 123a233" 输出:123
输入: "-123 a 34" 输出:-123
输入: "1232334344556566" 输出:int类型的最大值
输入: "-123444554558" 输出:int类型的最小值
思路:
1、处理正号和负号
2、处理空格
3、处理数据的溢出
4、处理数据中间出现非数字字符
代码:
public static int myAtoi(String str){ if(str == null || str.equals("")){ return 0; } char[] chs = str.toCharArray(); long num = 0; boolean flag1 = true; int flag = 1; for(int i=0; i<chs.length; i++){ //处理正负符号 if(flag1 && chs[i] == '+'){ flag1 = false; continue; } if(flag1 && chs[i] == '-'){ flag = -1; flag1 = false; continue; } //处理空格 if(flag1 && chs[i] == ' '){ continue; } if(!(chs[i] >= '0' && chs[i] <= '9')){ //判断是否溢出 long num1 = num*flag; if( num1 >= Integer.MAX_VALUE){ return Integer.MAX_VALUE; }else{ if(num1 <= Integer.MIN_VALUE){ return Integer.MIN_VALUE; }else{ return (int)num1; } } }else{ flag1 = false; num = num*10 + chs[i]-'0'; long num1 = num*flag; if( num1 >= Integer.MAX_VALUE){ return Integer.MAX_VALUE; }else{ if(num1 <= Integer.MIN_VALUE){ return Integer.MIN_VALUE; }else{ continue; } } } } long num1 = num*flag; if( num1 >= Integer.MAX_VALUE){ return Integer.MAX_VALUE; }else{ if(num1 <= Integer.MIN_VALUE){ return Integer.MIN_VALUE; }else{ return (int)num1; } }
}