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;
        }
    
    }
  • 相关阅读:
    super的使用
    Django--自定义 Command 命令
    Django models
    二柱子的编程 四则运算2
    阅读《梦断代码》计划
    随机数计算小学四则运算
    人月神话有感
    软件演化
    软件测试
    软件实现
  • 原文地址:https://www.cnblogs.com/Demrystv/p/9557659.html
Copyright © 2011-2022 走看看