题目描述:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0。
输入描述:输入一个字符串,包括数字字母符号,可以为空。
输出描述:如果是合法的数值表达则返回该数字,否则返回 0。
示例:
输入:+2147483647
1a33
输出:2147483647
0
分析:
1. 首先判断 str 是否为空;
2. 其次需要考虑到 str 是否有正负符号,这里使用一个 boolean 变量 isNeg 表示,方便最后进行返回值的变换;
3. 使用 Character.isDigit() 来判断每个字符是否是数字;
4. 考虑 int 的取值范围,为了确保正确,使用一个 double 型的变量作为中间变量,最后强转成 int 作为返回值;
5. 判断最后得到的中间变量是否超出 int 的取值范围。
1 public class Solution { 2 public int StrToInt(String str) { 3 if (str.length() == 0 || "".equals(str)) { 4 return 0; 5 } 6 boolean isNeg = false; 7 if (str.charAt(0) == ‘+‘) { 8 str = str.substring(1); 9 } else if (str.charAt(0) == ‘-‘) { 10 isNeg = true; 11 str = str.substring(1); 12 } 13 char[] s = str.toCharArray(); 14 double res = 0; 15 for (int i = 0; i < s.length; i++) { 16 if (!Character.isDigit(s[i])) { 17 return 0; 18 } else { 19 res += Math.pow(10, s.length - i - 1) * (s[i] - 48); 20 } 21 } 22 if(isNeg==false) { 23 if(res>Integer.MAX_VALUE) { 24 return 0; 25 }else { 26 return (int)res; 27 } 28 }else { 29 if((0-res)<Integer.MIN_VALUE) { 30 return 0; 31 }else { 32 return (int)(0-res); 33 } 34 } 35 } 36 }
原文:https://www.cnblogs.com/lf6688/p/13631616.html