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

/*
 * 问题
 * 将整数字符串转成整数值 不满足转换条件返回flase 超出范围则返回0
 *
 * 思考 1:如果字符串表示的数值溢出整数范围,要怎么判断?
 *      2:该用正数存储还是负数存储?(整数的负数范围比正数范围大1)
 *      3:哪些情况不满足转换条件?
 * 
 * 解题思路
 * 先判断str 是否满足转换条件
 * 一 不以"-"和数字开头
 * 二 以"-"开头但是长度为1或者"-"接0,以0开头 且长度大于1
 * 三 满足一二但是字符串中含有非数字
 *
 * 再判断是否有溢出
 * 转化过程中先统一用负数来表示 负数绝对值更大.
 * 溢出时的数字无法完成转换 所以无法直接比较 在遍历时
 *    比较Integer.MIN_VALUE%10与Integer.MIN_VALUE/10的
 *    值和字符串遍历到当前位cur和前一位的总值res的大小关系
 *
 * 补充:字符和整数作比较是把字符转化成Ascii在做比较,故所得结果的也是整数值
 *                    */
public class SQ3 {
   public static boolean isValidchar(char[] chas) {
        if (chas[0] != '-' && (chas[0] < '0' || chas[0] > '9'))
            return false;
        if ((chas[0] == '-' && chas.length == 1)||
                (chas[0] =='0'&& chas.length > 1))
            return false;
        for (int i = 0; i < chas.length; i++) {
            if (chas[0] < '0' || chas[0] > '9')
                return false;
        }
        return true;
    }
    public static int convert(String str){
       if (str==null||str.equals(""))
           return 0;
       char[] chars =str.toCharArray();
       if (!isValidchar(chars)){//if+return 都不用else
           return 0;
       }
       boolean posi=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=posi?0:1;i<chars.length;i++){
           cur='0'-chars[i];
           if (res<minq||(res==minq&&cur<minr))
           {
               return 0;
           }
           res=res*10+cur;
       }
       if (posi&&res==Integer.MIN_VALUE){
           return 0;
       }
       return posi? -res:res;
    }

    public static void main(String[] args) {
        String str="13576462";
        System.out.println(convert(str)+1);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值