将字符串转换成整数[Java]

来源:互联网 发布:淘宝网情侣装dongji 编辑:程序博客网 时间:2024/06/05 03:50

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 
输入描述:
输入一个字符串,包括数字字母符号,可以为空


输出描述:
如果是合法的数值表达则返回该数字,否则返回0

输入例子:
+2147483647    1a33

输出例子:
2147483647    0
import java.util.Scanner;public class StringToInteger {    public static void main(String[] args) {        Scanner sin = new Scanner(System.in);        while (sin.hasNext()) {            String readLine = sin.nextLine();            int result = new StringToInteger().StrToInt(readLine.trim());            System.out.println(result + " " + statusValid);        }        sin.close();    }    // 定义全局变量, 判断输出的 0 是非法输入, 还是正常输入的 “0”    public static boolean statusValid = true;    public int StrToInt(String str) {        // 输入为 null 或者 字符串为空        if (str == null || str.length() == 0) {            statusValid = false;            return 0;        }        int start = 0;        int tag = 0;        if (str.charAt(0) == '+') {            start = 1;            tag = 1;        } else if (str.charAt(0) == '-') {            start = 1;            tag = -1;        } else {            start = 0;            tag = 1;        }        // str == “+” 或者 “-”        if (start == 1 && str.length() == 1) {            statusValid = false;            return 0;        }        long current = 0L;        for (int i = start; i < str.length(); i++) {            char temp = str.charAt(i);            if (temp >= '0' && temp <= '9') {                //current = current * 10 + (temp - '0');                current = (current << 1) + (current << 3) + (temp & 0xf);            } else {                // 字符串中有非法字符                statusValid = false;                return 0;            }        }        long result = tag * current;        // 上溢出或者下溢出        if (tag == 1 && result > Integer.MAX_VALUE || tag == -1 && result < Integer.MIN_VALUE) {            statusValid = false;            return 0;        }        statusValid = true;        return (int) result;    }

原创粉丝点击