题目: 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0
这个要经过很多的判断,考虑各种不符合的情况
首先字符串不能为空,
字符串的第一位可以是正负号和数字,
字符串剩下的每一位都要是数字,考虑越界的情况,
首个符号是负号返回的结果也应该是负数,
这个负数的结果可以最后一起加一个负号
package helen.d;
public class StrToInt {
public static boolean valid;
public static int strToInt(String str){
valid=false;
if(str==null||str.length()==0){
return 0;
}
long num=0;
boolean isNegative=false;
for(int i=0;i<str.length();i++){
if(i==0&&(str.charAt(i)=='-'||str.charAt(i)=='+')){
if(str.charAt(i)=='-'){
isNegative=true;
}
if(str.length()==1){
return 0;
}
continue;
}
if(str.charAt(i)>'9'||str.charAt(i)<'0'){
return 0;
}
num=num*10+(str.charAt(i)-'0');
}
if((num>Integer.MAX_VALUE)){
return 0;
}
valid=true;
return (int)num*(isNegative?-1:1);
}
void test(String string) {
int result = strToInt(string);
if(result == 0 && valid == false)
System.out.printf("the input %s is invalid.\n", string);
else
System.out.printf("number for %s is: %d.\n", string, result);
}
public static void main(String args[]){
new StrToInt().test(null);
new StrToInt().test("");
new StrToInt().test("123");
new StrToInt().test("-123");
new StrToInt().test("1a33");
new StrToInt().test("+0");
new StrToInt().test("+0");
new StrToInt().test("+0");
new StrToInt().test("-0");
new StrToInt().test("+2147483647");//最大整数
new StrToInt().test("-2147483647");//最小整数
new StrToInt().test("+2147483648");
new StrToInt().test("-2147483648"); //有效的最小负整数, 0x80000000
new StrToInt().test("+2147483649");
new StrToInt().test("-2147483649");
new StrToInt().test("+");
new StrToInt().test("-");
}
}