剑指offer_字符串转整数

/*
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 
数值为0或者字符串不是一个合法的数值则返回0 

输入描述:
输入一个字符串,包括数字字母符号,可以为空

输出描述:
如果是合法的数值表达则返回该数字,否则返回0

示例1
输入
+2147483647
    1a33
输出
2147483647
    0

正常:
字符串如何转换为数字
有正负号如何处理

异常:
字符串为空
有字母或者符号
超出整型范围
int	-2^31=-2147483648	2^31=2147483647
先求正数的结果2147483648,可2147483648超出整型范围

补充:
区分正常的0和异常的0
如果字符串只有一个正号或者负号
*/
import java.lang.Math;
class  StrToInt2
{
	public static boolean isValid=true;
	public static int strToInt(String str) {

        if (str==null||str.length()<=0)
        {
			isValid=false;
			return 0;
        }

		int start=0;	//除去正负号之外字符串开始的位置
		int flag=1;		//控制符号位

		if (str.length()==1&&(str.charAt(0)=='+'||str.charAt(0)=='-'))
		{
			isValid=false;
			return 0;
			
		}else if (str.length()>1&&str.charAt(0)=='+')
		{
			start=1;
		}
		else if (str.length()>1&&str.charAt(0)=='-')
		{
			start=1;
			flag=-1;
		}

		int num=0;
		for (int i=start; i<str.length(); i++)
		{
			//判断是否存在字母或者符号
			if (str.charAt(i)<'0'||str.charAt(i)>'9')
			{
				isValid=false;
				return 0;
			}
			num+=flag*(str.charAt(i)-'0')*(Math.pow(10,str.length()-1-i));
		}

		return num;
    }

	public static void main(String[] args) 
	{
		System.out.println(strToInt("-"));
	}
}

点赞