zoukankan      html  css  js  c++  java
  • 字符串问题----将整数字符串转换成整数值

    将整数字符串转换成整数值

      

      给定一个字符串str,如果str符合日常书写的规范,并属于32位整数的范围,返回str所代表的整数值,否则返回0。如 023, A13, 2147483648,均返回0。

      【解题思路】

      定义四个变量,flag表示正负,res表示结果,minq表示最小值除以10的商,minr表示最小值除以10 的余数。因为最小值是 -2147483648,最大值是2147483647,负数有更大的范围,所以以负数的形式保留绝对值,最后根据flag进行修改。

    package com.test;
    
    /**
     * Created by Demrystv.
     */
    public class convertNumAtr2NumVal {
    
        public int convert(String str){
            if (str == null || str.equals("")){
                return 0;
            }
    
            //不符合格式要求,不能转
            char[] chars = str.toCharArray();
            if (!isValid(chars)){
                return 0;
            }
    
            boolean flag = chars[0] == '-' ? false : true;
            int minq = Integer.MIN_VALUE / 10;
            int minr = Integer.MIN_VALUE % 10;
            int res = 0;
            int cur = 0;
    
            for (int i = flag ? 0 : 1; i < chars.length; i++) {
                cur = '0' - chars[i]; //用当前数字的负数形式
                // 超出范围
                if (cur < minq || (res == minq && cur < minr)){
                    return 0;
                }
                res = res * 10 + cur;
            }
    
            //正好比整数的最大值大1
            if (flag && res == Integer.MIN_VALUE){
                return 0;
            }
    
            return flag ? -res : res;
        }
    
        private boolean isValid(char[] chars){
    
            // A02这种情况
            if (chars[0] != '-' && (chars[0] < '0' || chars[0] > '9' )){
                return false;
            }
    
            // - 或者 -012 这种情况
            if (chars[0] == '-' && (chars.length == 1 || chars[1] == 0)){
                return false;
            }
    
            // 012这种情况
            if (chars[0] == '0' && chars.length > 1){
                return false;
            }
    
            // 从第二位开始,对应的是 0B2
            for (int i = 1; i < chars.length; i++) {
                if (chars[i] < '0' || chars[i] > '9'){
                    return false;
                }
            }
            return true;
        }
    
    }
  • 相关阅读:
    Hyper-V无法启动虚拟机因为虚拟机监控程序未运行
    SpringBoot项目中自动加载datasourceConfig配置导致启动失败
    redis 数据类型与命令
    Redis入门与安装,与配置
    MySQL 主从配置
    MySql 中的事务
    什么是Docker?
    window10下安装Docker
    Docker 常见命令
    原生SQL语句
  • 原文地址:https://www.cnblogs.com/Demrystv/p/9557659.html
Copyright © 2011-2022 走看看