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

把一个字符串转换成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);
		}
	}
}

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

发布了61 篇原创文章 · 获赞 114 · 访问量 42万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章