剑指offer_字符串转整数

/*
分析:
str[0]-'0';
假如str[0]存放的数据类型是字符‘1’,那么减去‘0’就得到一个整形数字1,而不是字符型‘1’。
字符‘0’的ASCLL值是48,而字符‘1’是49,所以str[0]-'0'相当于49-48=1
*/

class  StrToInt
{
	
	/**
	功能:将字符串转换成整数
	@author ldp
	@parm 待转换字符串
	@return int型整数
	*/

	/*
	//只能实现基本功能
	static int strToInt(String str)
	{
		int num=0;
		for (int i=0;i<str.length();i++ )
		{
			num=num*10+(int)(str.charAt(i)-'0');
		}
		return num;
	}
	*/

	//考虑边界条件、错误处理
	static int strToInt(String str)
	{
		long num=0;//因为后面要判断num是否超出int范围,所以先要用一个更大范围的类型表示num

		//判断字符串是否为空
		if (str==null)
		{
			System.out.println("输入的字符串不能为空!");
			return -1;
		}

		//考虑输入的字符串带有正负号
		int flag=1,k=0;
		if (str.charAt(0)=='-')
		{
			flag=-1;
			k++;
		}else if (str.charAt(0)=='+')
		{
			k++;
		}
		
		//考虑输入的字符串中有不能转化的字符,只允许数字、a-z大小写字母以及大小写x(十六进制0x)出现
		for (int i=k;i<str.length();i++ )
		{
			if (('0'<=(str.charAt(i))&&(str.charAt(i))<='9')||
				('A'<=(str.charAt(i))&&(str.charAt(i))<='F')||
				('a'<=(str.charAt(i))&&(str.charAt(i))<='f')||
				(str.charAt(i)=='x')||
				(str.charAt(i)=='X'))
				continue;
			else
			{
				System.out.println("输入的字符不能转化为整数!");
				return -1;
			}	
		}

		//考虑十六进制、八进制、十进制
		int radix=0;
		if ((str.charAt(k)=='0')&&((str.charAt(k+1)=='x')||(str.charAt(k+1)=='X')))
		{
			k=k+2;
			radix=16;
		}else if (str.charAt(k)=='0')
		{
			k=k+1;
			radix=8;
		}else
			radix=10;

		//转换过程
		if (radix==16)
		{
			for (int i=k;i<str.length();i++ )
			{
				if ('0'>=str.charAt(i)&&str.charAt(i)<='9')
				{
					num=num*radix+(str.charAt(i)-'0');
				}else if (('A'<=(str.charAt(i))&&(str.charAt(i))<='F'))
				{
					num=num*radix+(str.charAt(i)-'A');
				}else if (('a'<=(str.charAt(i))&&(str.charAt(i))<='f'))
				{
					num=num*radix+(str.charAt(i)-'a');
				}
			}
		}
		else 
		{
			for (int i=k;i<str.length();i++ )
			{
				num=num*radix+(str.charAt(i)-'0');
			}
		}
			
		//判断字符串转换成的数字是否超出int范围
		if (((flag*num)<Integer.MIN_VALUE)||((flag*num)> Integer.MAX_VALUE))
		{
			System.out.println("超出int范围");
			return -1;
		}

		return (int)(flag*num);//返回值必须在int的范围内
	}

	public static void main(String[] args) 
	{
		String str="0X1234";
		int num=strToInt(str);
		System.out.println(num);
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值