题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为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"));
    }
}