2.字符串转数字

①首先判断正负号问题;

②遍历字符串中的每一个字符,将其转化成数字;

③考虑int溢出问题(重要);

④得到最终的结果,带上正负号;


溢出判断1:

public int Strtoint(String str){
		//判断输入是否合法,不合法返回0
		if(str == null || str.trim().length() == 0){
			//必须先判断str==null
			return 0;
		}
		//去除首尾空格转换为字符数组
		char[] arrstr = str.trim().toCharArray();
		//判断首字符区分转换后的数据的正负
                //symbol初始值必须为1,因为可能正数没有带‘+’号
		int symbol = 1,start = 0;
		if (arrstr[0] == '+'){
			symbol = 1;
		    start=1;
		}
		if (arrstr[0] == '-'){
			symbol = -1;
			start=1;
		}
		int re = 0;
		//遍历字符数组(除去首字符)转换为数字
		for (int i =start; i < arrstr.length;i++){
		
			//如果字符转换成数字不再0-9之间则不合法返回0
			if(arrstr[i]<'0'||arrstr[i]>'9'){
				return 0;
			}
			//需要判断此时的数据是否溢出,如果溢出返回0
			int tmp = re*10 +(int)(arrstr[i]-'0');
			//如果溢出则tmp值不等于re*10 +(int)(arrstr[i]-'0')
			if((tmp-(int)(arrstr[i]-'0'))/10 !=re)
				return 0;
			//将字符转化成数字
			re = re*10+(int)(arrstr[i]-'0');
		}
	    return symbol*re;
		
		
	}

溢出判断2:

    public int StrToInt(String str) {
       if (str == null || str.trim().length() == 0)
           return 0;
        char[] arrstr = str.trim().toCharArray();
        //判断符号
        int sign = 1,start = 0;
        if (arrstr[0] == '-'){
            sign = -1;
            start = 1;
        }
           
        
        if (arrstr[0] == '+'){
             sign = 1;
             start = 1;
        }
        long re = 0;   
        for (int i = start; i < arrstr.length; i++ ){
            //如果字符不在数字范围内,则返回0
            if(arrstr[i] < '0' || arrstr[i] > '9')
                return 0;
            //当前数字时tmp,判断是否溢出
            /*int tmp = re*10+(int)(arrstr[i]-'0');
            if ((tmp - (int)(arrstr[i]-'0'))/10 != re)
                return 0;*/
            
            re = re*10+(int)(arrstr[i]-'0');
            //注意考虑大于最大值时字符串转化后为正数,小于最小值时字符串转化后为负数
            if ((sign == 1&&re > Integer.MAX_VALUE)|| ( sign == -1)&&re < Integer.MIN_VALUE)
                return 0;
           
        }
        return (int)(sign*re);
        
       
    }   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值