题目描述
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1
输入
+2147483647 1a33
输出
2147483647 0
解答:
public class Q_49 { public int StrToInt(String str) { char[] strchar = str.toCharArray(); if (str.length() == 0) return 0; long sum = 0;//用long是防止溢出 int s = 1; if (strchar[0] == '-') s = -1; for (int i = (strchar[0] == '-' || strchar[0] == '+') ? 1 : 0; i < str.length(); i++) { if (!('0' <= strchar[i] && strchar[i] <= '9')) return 0; sum = (sum << 1) + (sum << 3) + (strchar[i] & 0xf);//sum<<1+sum<<3=sum*2+sum*8 strchar[i]&0xf:相当于取二进制后四位 } if (sum * s <= Integer.MAX_VALUE && sum * s >= Integer.MIN_VALUE)//溢出就返回0; return (int) (sum * s); return 0; } public static void main(String[] args) { System.out.println(new Q_49().StrToInt("2147483647")); } }