《剑指offer》把字符串转换成整数-Java
把字符串转换成整数
http://www.nowcoder.com/questionTerminal/1277c681251b4372bdef344468e4f26e
思路:
这个题本身不难,就是字符串转数值,从前到后一个一个遍历就好了。难的是处理各种异常case:字符串为空字符串为“0”首位是“+”or“-”首位是“+”“-”“0-9”以外的字符数值的上下溢出(Java中最大正整数是2147483647,最大负整数是-2147483648)
public class Solution { public int StrToInt(String str) { int fuhao = 0; //标示首位是否是符号位 int target = 0; //标示这个数最终是正还是负数,这里初始化为0,是因为下面判断要用到。如果初始化为-1的话,下面判断上溢出,是进不去条件的 long value = 0; if(str.length() == 0 || str.equals("")){ return 0; } if(str.charAt(0) == '+'){ fuhao = 1; target = 0; }else if(str.charAt(0) == '-'){ fuhao = 1; target = 1; }else if(str.charAt(0) < '0' || str.charAt(0) > '9'){ //第一位就是非法字符的话,直接返回0 return 0; } for(int i = fuhao; i < str.length(); i ++){ if(str.charAt(i) >= '0' && str.charAt(i) <= '9'){ value = value * 10 + (str.charAt(i) - '0'); if(target == 0 && value > Integer.MAX_VALUE){ //上溢出 return 0; } if(target == 1 && (-1)*value < Integer.MIN_VALUE){ //下溢出,value前面一定要加(-1),因为是和负数做比较 return 0; } }else{ return 0; //非法字符 } } if(target == 1) return (int) (-1 * value); else return (int) value; } }