把一个字符串转换成int类型(Java实现)

本文探讨如何在Java中将字符串转换为int类型,重点关注边界条件和异常处理。Java在处理溢出时有其独特的方式,不同于C++。通过分析Integer类的构造方法,提供了一种实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

把一个字符串转换成int类型,比如“123”  --> 123

这道题目主要考查边界情况及非法输入的处理,c++跟Java处理起来不一样,Java是不存在整数比Integer.MAX_VALUE还大的数,Java会将溢出的数自动进行处理成合法的值,负数也是同理,剑指offer49题用c++实现,直接比较了一下正数或负数跟最大正整数和最小负整数的值,Java这样比较是不行的。参考Integer("123455")的构造方法,实现如下:

public class _49_StrToInt {//把一个字符串转换成int类型,比如“123”  --》 123
	
	public static boolean valid = false;
	public static boolean coreFlag=false;
	public static int strToInt(String num){
		if(num == null || num.length() == 0){
			valid = false;
			return 0;
		}
		int a = 0;
		if(num.charAt(0)=='+'){//
			a = core(num,'+');
		}else if(num.charAt(0) == '-'){
			a = core(num,'-');
		}else if(num.charAt(0) >= '0' && num.charAt(0)<='9'){
			a = core(num,'0');
		}else{
			valid = false;
			return 0;
		}
		if(coreFlag){
			valid = true;
			return a;
		}else{
			valid = false;
			return 0;
		}
	}
	
	public static int core(String num, char flag){
		int i=0;
		if(flag == '+' ){
			i = 1;
		}
		if(flag == '-'){
			i=1;
		}
		int a = 0;
		int temp =a;
		for(;i<num.length();i++){
			if(!(num.charAt(i) >='0' && num.charAt(i)<='9' )){
				coreFlag = false;
				return 0;
			}
			temp =a ;
			if(flag != '-'){
				a = a*10;
				a += (int)(num.charAt(i)-'0');
				if( temp > a){//若当前数小,说明溢出
					coreFlag = false;
					return 0;
				}
			}else {
				a = a*10;
				a -= (int)(num.charAt(i)-'0');/负数直接相减,不用乘以-1
				if( temp < a){//负数应该越加越小,若当前数比之前数大,说明溢出
					coreFlag = false;
					return 0;
				}
			}//
		}
		
		coreFlag = true;
		return a;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int a = strToInt("-21474836"); //-2147483648 
		if(valid){
			System.out.println(a);
		}
	}
}

分别输入最大最小值或者比其还大或还小的值,以及其他非法数字格式测试,输出正确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值