剑指offer43--字符串转化成整数


一、题目


题目:实现一个函数stringToInt,实现把字符串转换成整数这个功能,不能使用atoi或者其他类似的库函数。



二、思想


(1)使用字符串的方法charAt( )来对字符串进行操作

(2)本题目其实考察的不是简单的转换,而是对思想全面性的考察

(3)考察的是能否注意到所有可能抛出异常的情况

(4)正负、是否都为数字、最大范围等



三、程序



package 剑指offer;

/*题目:实现一个函数stringToInt,实现把字符串转换成整数这个功能,不能使用atoi或者其他类似的库函数。*/
public class Test49 {
	
	public static int stringToInt(String num){
		// 边界条件判断
		if(num == null || num.length() < 1){
			throw new NumberFormatException();
		}
		
		char first = num.charAt(0);
		// 为了避免冗余,使用下面条件选择的方式
		if(first == '-'){
			return parseString(num, 1, false);
		}else if(first == '+'){
			return parseString(num, 1, true);
		}else if(first >= '0' && first <= '9'){
			return parseString(num, 0, true);
		}else{
			throw new NumberFormatException();
		}
	}
	
	// 判断是不是数字
    private static boolean isDigit(char c) {
        return c >= '0' && c <= '9';
    }
	
    // 真正的对字符串进行转换,主要使用的方法是charAt()
	public static int parseString(String num, int index, boolean i){
		if(index >= num.length()){
			throw new NumberFormatException();
		}
		
		int result = 0;
		long temp = 0;
		
		while(index < num.length() && isDigit(num.charAt(index))){
			temp = temp * 10 + (num.charAt(index) - '0');
            if (temp > 0x8000_0000L) {
                throw new NumberFormatException(num);
            }
            index++;
		}
		// 判断数据的正负
		if(i){
			if(temp > 0x8000_0000L){
				throw new NumberFormatException(num);
			}else{
				result = (int)temp;
			}
		}else {
            if (temp == 0x8000_0000L) {
                result = 0x8000_0000;
            } else {
                result = (int) -temp;
            }
        }
		return result;
	}
	
	
    public static void main(String[] args) {
      System.out.println(stringToInt("123"));
      System.out.println(stringToInt("+123"));
      System.out.println(stringToInt("-123"));
      System.out.println(stringToInt("1a123"));
      System.out.println(stringToInt("+1233456"));
      System.out.println(stringToInt("-1232424"));
      System.out.println(stringToInt("+++"));
      System.out.println(stringToInt("---"));
  }
}





你可能感兴趣的:(java,字符串转换,整数)