【题目】将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数
* 【】整数(32位)最大值:0X7fff ffff( 0111 1111 1111 1111 1111 1111 1111 1111 (0代表正号))
* 最小值:0x8000 0000( 1000 0000 0000 0000 0000 0000 0000 0000 (1代表负号))
1 package com.exe10.offer; 2 3 /** 4 * 【题目】将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数 5 * 【】整数(32位)最大值:0X7fff ffff( 0111 1111 1111 1111 1111 1111 1111 1111 (0代表正号)) 6 * 最小值:0x8000 0000( 1000 0000 0000 0000 0000 0000 0000 0000 (1代表负号)) 7 * @author WGS 8 * 9 */ 10 public class StrToInt { 11 boolean isValid=true;//定义个全局变量表示发生溢出 12 13 14 public int strToInt(String str){ 15 if(str==null) return -1; 16 long sum=0; 17 int begin=0;//起始字符 18 boolean minus=false;//默认为正号 19 if(str!=null && !str.equals("")){ 20 char firstChar=str.charAt(begin); 21 if(firstChar=='+'){ 22 begin++; 23 }else if(firstChar=='-'){ 24 begin++; 25 minus=true;//为负数 26 } 27 sum=strToInt(str,minus,begin); 28 }else{ 29 //非法输入:当输入为"" 的时候 30 isValid=false; 31 } 32 //System.out.println(isValid); 33 return (int)sum; 34 35 } 36 37 private long strToInt(String str, boolean minus, int begin) { 38 int flag=minus?-1:1; 39 long sum=0; 40 int index=begin; 41 42 while(index<str.length()){ 43 44 char curChar=str.charAt(index); 45 if(curChar>='0' && curChar<='9'){ 46 sum=sum*10+flag*(curChar-'0'); 47 48 //假如越界的话 49 if((minus && sum<Integer.MIN_VALUE) || //MIN_VALUE==0x80000000 50 (!minus &&sum>Integer.MAX_VALUE ))//MAX_VALUE = 0x7fffffff; 51 return 0; 52 }else{ 53 return 0;//字符串中只要出现不是0-9字符即返回0 54 } 55 index++; 56 } 57 return sum; 58 } 59 60 public static void main(String[] args) { 61 StrToInt s=new StrToInt(); 62 int num=s.strToInt(""); 63 System.out.println(num); 64 65 } 66 67 }