字符串转换成整数

题目描述

输入一个表示整数的字符串,把该字符串转换成整数并输出,例如输入字符串"345",则输出整数345。

主要思想:将输入的字符串,拆解为单个的字符

1、去空之后,开始的字符是否为“+”或者“-”;

2、每个字符减去‘0’,判读输入的字符是不是0-9的;

3、如果为可变数字字符则先前结果乘以10加当前数字;

4、特别注意越界的问题。


	/**
	 * <p>
	 * </p>
	 * @author zhangjunshuai
	 * @date 2014-5-15 上午10:12:14
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String[] test ="-2147483648,2147483648,-2147483649,abc,-abc,1a,23a8f,-3924x8fc,  321,  -321,123 456,123    ,   - 321,  +4488,  + 413,++c,++1,--2,  -2".split(",");
		for(int i=0;i<test.length;i++)
			toNum(test[i]);
		toNum("-2147483658");
	}
	/**
	 * <p>
	 * 字符转为整数
	 * </p>
	 * @author zhangjunshuai
	 * @date 2014-5-15 上午11:33:08
	 * @param stringNum
	 */
	public static void toNum(String stringNum){
		if(null !=stringNum&&null != stringNum.trim()){
			String stringNumTrim = stringNum.trim(); 
			
			int MAX = Integer.MAX_VALUE;
			int MIN = Integer.MIN_VALUE;
			int MAX_DIV = MAX/10;
			int MIN_DIV = -1*(MIN/10);
			int MAX_R = MAX%10;//最大值取余
			int MIN_R = MIN%10;//最小值取余
			int result = 0;
			int sign = 1;
			int count = 0;
			char[] stringnum =  stringNumTrim.toCharArray();
			if('-'==stringnum[count]){
				++count;
				sign = -1;
			}
			if('+'==stringnum[count]){
				++count;
				sign = +1;
			}
			for(;count<stringnum.length;count++){
				int r = stringnum[count]-'0';//char其实就是整数
				if(sign>0
						&&(result>MAX_DIV||(result==MAX_DIV&&r>MAX_R))){
					result =MAX;
					break;
				}
				if(sign<0
						&&(result<MIN_DIV||(result==MIN_DIV&&MIN_R<r))){
					result = MIN;
					break;
				}
				if(r>-1&&r<10){
					result = result*10+r;
				}else{
					break;
				}
			}
			System.out.println("输入的字符为:"+stringNumTrim+",结果是:"+result);	
		}else{
			System.out.println("请输入有效的字符串");
		}
	}

PS:
本文是本人在学习July算法时候所做笔记,所有思想目前都来自此地址。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值