/*
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。
数值为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("-"));
}
}