8 字符串转数字

这道题对于我而言难度比较大,示例里没有显示所有情况,整提交了20次,对代码做了重构,终于完成

class Solution {
    public static int myAtoi(String str) {
		//如果该字符串第一个字符非有效整数字符、串为空、仅包含空白 返回0
		if(str.isEmpty()) return 0;
		if(str.indexOf(".")!=-1) {
			if(str.indexOf(".")==0)return 0;
			str=str.substring(0, str.indexOf("."));
		}
		str=str.trim();
		char[] charArray = str.toCharArray();
		//转换
		int strlength = str.length();
		if(strlength==0)return 0;
		int point=0;
		int sign =-1;
		//开存储空间
		StringBuilder sbu = new StringBuilder(str.length());
		//判断第一位是否为为数符,且不是小数点
		if(isPlusOrMinusSign(charArray[point])||isNumber(charArray[point])){
			//若第一位位数符,则置标志位为0
			if(isPlusOrMinusSign(charArray[point])==true) sign=0;
			sbu.append(charArray[point++]);
		}else {
			return 0;
		}
		//获取有效值
        while(point<strlength&&isNumber(charArray[point])) {
        	sbu.append(charArray[point]);
        	point++;
        }
        if(sign==0)while(sbu.indexOf("0")==1) sbu.deleteCharAt(sbu.indexOf("0"));
        else while(sbu.indexOf("0")==0) sbu.deleteCharAt(sbu.indexOf("0"));
         if(sbu.length()==0)return 0;
        //delete(sbu.indexOf("0"));
        if(sbu.length()>11) {
			if(sbu.charAt(0) == 45) {
				return -2147483648;
			}
			return 2147483647;
		}
        if(sbu.length()==1&&sign==0) {
        	return 0;
        }
        long info = 0;
		info = Long.parseLong(sbu.toString());
		if(info > 2147483647) {
			return 2147483647;
		}
		if(info < -2147483648) {
			return -2147483648;
		}
        return (int)info;
        //如果转换后的结果越界 返回0 | 2147 4836 47 -2147 4836 48
	}
	public static boolean isNumber(char info) {
		return info>=48&&info<=57;
	}
	
	public static boolean isPlusOrMinusSign(char info) {
		if(info==43||info==45) {
			return true;
		}
		return false;
	}
}

猜你喜欢

转载自blog.csdn.net/zcy_wxy/article/details/85999978