zoukankan      html  css  js  c++  java
  • 不用系统函数将字符串转换成整型【Java算法】

    1.判断字符串是否为空;
    2.判断字符串是否为空字符串;
    3.判断是否为负数;
    4.从左向右循环取字符,转化为数字,将上次结果乘10,加上当前数字;
    5.在运算前,判断结果是否超出int型范围。

    MyParseInt.java:

    01.import java.util.*;

    02.public class MyParseInt {
    03.
    04.    public static int myParseInt(String str) throws NumberFormatException {
    05.        //存放结果
    06.        int result = 0;
    07.        //标记是否为负数
    08.        boolean negative = false;
    09.        //数字开始位置:正数为0,负数为1(除去‘-’)
    10.        int start = 0;
    11.        //int型边界值的十位以上的数字
    12.        int limitLeft;
    13.        //int型边界值的个位数字
    14.        int limitRight;
    15.        //判断是否为空
    16.        if (str == null) {
    17.            throw new NumberFormatException("null");
    18.        }
    19.        int len = str.length();
    20.        //判断是否为空字符串
    21.        if (len < 1) {
    22.            throw new NumberFormatException("empty");
    23.        } else {
    24.            if (str.charAt(0) == '-') {
    25.                if (len > 1) {
    26.                    //负数
    27.                    negative = true;
    28.                    start = 1;
    29.                    limitLeft = -(Integer.MIN_VALUE / 10);
    30.                    limitRight = -(Integer.MIN_VALUE % 10);
    31.                } else {
    32.                    throw new NumberFormatException("not number");
    33.                }
    34.            } else {
    35.                limitLeft = Integer.MAX_VALUE / 10;
    36.                limitRight = Integer.MAX_VALUE % 10;
    37.            }
    38.        }
    39.        //从左向右取字符,转化为数字,将上次结果乘10,加上当前数字
    40.        for (int i = start; i < len; i++) {
    41.            char c = str.charAt(i);
    42.            //判断是否为数字
    43.            if (c < 48 || c > 57) {
    44.                throw new NumberFormatException("not number");
    45.            } else {
    46.                int value = c - 48;//减去0的Ascii码 (从左向右依次取)47.                //在运算前,判断结果是否超出int型范围
    48.                if (result > limitLeft || (result == limitLeft && value >= limitRight + 1)) {
    49.                    throw new NumberFormatException("number is out of bounds");
    50.                } else {
    51.                    result = result *10 + value;
    52.                }
    53.            }
    54.        }
    55.        if (negative) {
    56.            result = -result;
    57.        }
    58.        return result;
    59.    }
    60.
    61.    public static void main(String[] args) {
    62.        while (true) {
    63.            Scanner sc = new Scanner(System.in);
    64.            String str = sc.next();
    65.            try {
    66.                System.out.println(MyParseInt.myParseInt(str));    
    67.            }
    68.            catch (NumberFormatException e) {
    69.                e.printStackTrace();
    70.            }    
    71.        }
    72.    }
    73.}
  • 相关阅读:
    001-导航条悬浮顶部
    000-导航栏单击事件背景变换
    1-MySQL命令行
    了解CentOS服务器的基本信息
    SecureCRT配色
    SecureCRT中文显示乱码
    Android Studio 1.1 使用介绍及导入 jar 包和第三方依赖库
    Android Json 解析
    不断更新中 书签
    Android 常用的权限
  • 原文地址:https://www.cnblogs.com/youliang/p/3503713.html
Copyright © 2011-2022 走看看