题目:String to Integer
下面使用java编程,把String类型的字符串转换成Integer,即将java中的字符串转换成整数类型,如果字符串中包含数字字符并且以数字字符开始(开头的空格忽略),则截取字符串中最左边的一串数字字符转换为整数
如:“111aaa”处理之后的结果为111;
如果被处理的字符串中不包含数字或者没有以数字开始(开头的空格忽略),则处理结果一律为0;
如果处理结果超出了整数范围,则返回Integer的最大值或者最小值;
思路:1.拿到字符串,首先判断是否为null,如果未null则返回0作为处理结果
2.去除字符串(开头和结尾)的空格,判断字符串长度是否为0,如果为零则返回0作为处理结果
3.判断字符串的第一个字符是不是+或者-,设置变量sign记录。循环取字符串中的数字,根据该字符的ascll码与字符‘0’的ascll码的差值,确定其对应的Integer类型的值
4.如果字符串中有非数字,遇到就退出,保留前边的数字
5.考虑取值溢出情况,如果结果溢出了Integer的取值范围,则返回Integer的最大值或者最小值
代码:
public int myAtoi(String str){
//判断非空
if(str == null){
return 0;
}
//去掉空格
str.trim();
if(str.length() == 0){
return 0;
}
//判断+或者-
int sign = 1;
int index = 0;//字符str中的脚标
if(str.charAt(index) == '+'){
index++;
}else if(str.charAt(index) == '-'){
index++;
sign = -1;
}
//去的字符串中的数字部分,遇到非数字部分则跳出循环
long number = 0;//记录最终结果
for(; index < str.length(); index++){
if(str.charAt(index)<'0'||str.charAt(index>'9')){
break;
}
number = number*10+(str.charAt(Index)-'0');
if(number>Integer.MAX_VALUE){
break;//结果溢出integer的范围时停止
}
}
//判断溢出情况
if(number*sign > Integer.MAX_VAlUE){
return Integer.MAX_VALUE;
}
if(number*sign < Integer.MIN_VALUE){
return Integer.MIN_VALUE;
}
return (int)number*sign;
}