49、把字符串转换成整数
一、题目
题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647 1a33
输出
2147483647 0
二、解法
1 public class Solution { 2 /* public int StrToInt(String str) { 3 if(str.equals("") || str.length() == 0) 4 return 0; 5 char[] a = str.toCharArray(); 6 int fuhao = 0; 7 if(a[0] == '-') 8 fuhao = 1; 9 int sum = 0; 10 for(int i = fuhao; i < a.length;i++){ 11 if(a[i] == '+') 12 continue; 13 if(a[i]<48 || a[i]>57) 14 return 0; 15 sum = sum*10 + a[i]-48; 16 } 17 return fuhao == 0 ? sum : sum*-1; 18 19 }*/ 20 // 设置一个全局变量,来判断:当输出为0时,是字符串输入异常还是输入字符串为'0' 21 public static boolean flag; 22 public int StrToInt(String str) { 23 flag = false; 24 //判断输入是否合法 25 if(str == null || str.trim().equals("")){ 26 flag = true;//输入异常 27 return 0; 28 } 29 //symbol=0,说明该数为正数;symbol=1,该数为负数;start用来区分第一位是否为符号位 30 int symbol = 0; 31 int start = 0;//start等于1表示第一位是符号位 32 char[] chars = str.trim().toCharArray(); 33 if(chars[0] == '+'){ 34 start = 1; 35 }else if(chars[0] == '-'){ 36 start = 1; 37 symbol = 1; 38 } 39 int result = 0; 40 for(int i = start; i < chars.length; i++){ 41 if(chars[i] > '9' || chars[i] < '0'){ 42 flag = true;//输入异常 43 return 0; 44 } 45 result = result*10+chars[i]-48; 46 if(symbol == 0 && result > Integer.MAX_VALUE){ 47 flag = true;//输入异常 48 return 0; 49 } 50 if(symbol == 1 && result < Integer.MIN_VALUE){ 51 flag = true;//输入异常 52 return 0; 53 } 54 } 55 return symbol==0?result:result*(-1); 56 } 57 }