(atoi)String to Integer 49

corner case的处理

   

整数一般考虑两点:一点是符号,另外一点是越界

   

首先去掉多余的空格字符

   

然后读符号,可能是正号,也可能是负号,也可能没有符号

   

然后按顺序读数字

   

结束条件有三:

1、异常字符出现——舍弃异常字符后的数据,保留前面的数作为结果;

2、数字越界——返回最接近的整数;

3、正常结束

   

长度为0,返回0

   

输入0,返回0,但有个finished,如果为true,则是输入0,如果为false,则是长度0,如果直接是异常字符,那么还是返回0,此时finishedfalse

   

   

package stringToInt49;

   

public class StringToInt49 {

static boolean finished = false;

public int atoi(String str) {

int length = str.length();

if (length == 0)

return 0;

int i = 0;

boolean minus = false;

if (str.charAt(0) == '-') {

minus = true;

i++;

} else if (str.charAt(0) == '+') {

i++;

}

long MIN_VALUE = Integer.MIN_VALUE;

long MAX_VALUE = Integer.MAX_VALUE;

long num = 0;

   

for (; i < length && !finished; i++) {

char c = str.charAt(i);

if (c >= '0' && c <= '9') {

num *= 10;

num += c - '0';

} else {

num=0;

break;

}

   

if (minus && 0 - num < MIN_VALUE) {

return Integer.MIN_VALUE;

}

if (!minus && num > MAX_VALUE) {

return Integer.MAX_VALUE;

}

}

if (i==length) {

finished = true;

}

return minus ? new Long(0 - num).intValue() : new Long(num).intValue();

}

public static void main(String[] args) {

StringToInt49 stringToInt49=new StringToInt49();

System.out.println(stringToInt49.atoi("123"));

}

}

   

posted @ 2015-03-30 19:24  keedor  阅读(...)  评论(...编辑  收藏