【追求进步】把字符串转换成整数

大概有10天左右没有练习算法编程了!还是不能放下。。。

剑指offer49题

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。
在线代码:

package test1;

public class Test49 {
	
	 public static int StrToInt(String str) {
	        //例如将字符串“123”转化为123;理解是1*10=10;10*10+2=12;12*10+3=123;
	        if(str==null||str.length()<1){
	           throw new NumberFormatException(str);      
	        }
	       char first=str.charAt(0);
	       if(first=='-'){
	    	  return parseString(str,1,false); //符号负数的处理
	       }else if(first=='+'){
	    	  return parseString(str, 1, true);//符号正数处理
	       }else if(first>'0'&&first<'9'){
	    	   return parseString(str, 0, true);//正常处理
	       }else{
	    	   throw new NumberFormatException(str);//异常处理
	       }
	    }
	 private static int parseString(String str, int index, boolean sp) {
		 if(index >=str.length()){
			 throw new NumberFormatException(str);
		 }
		 int result = 0;
		 long tmp=0;
		 while(index<str.length()&&isDigit(str.charAt(index))){
			 tmp=tmp*10+str.charAt(index)-'0';//从最高位取数字,tmp=1;index=1,tmp=10+2;index=2,tmp=120+3;
			 //保证求出的值不超过整数的最大范围
			 if(tmp>Integer.MAX_VALUE){
				 throw new NumberFormatException(str);
			 }
			 index++;
		 }
		 //sp=true是表示正数。sp=false则是负数
		 if(sp){
			 if(tmp>=Integer.MAX_VALUE){
				 throw new NumberFormatException(str);
			 }else{
				 result=(int)tmp;
			 }
		 }else{
			 if(tmp==Integer.MAX_VALUE){
				 result = 0x8000_0000;
			 }else{
				 result=(int)-tmp;
			 }
		 }
		 return result;
	}
	 private static boolean isDigit(char c) {
	        return c >= '0' && c <= '9';
	    }
	 public static void main(String[] args) {
		 System.out.println(StrToInt("123"));
	}
}


你可能感兴趣的:(【追求进步】把字符串转换成整数)