字符串转整型在平常使用中算比较常见的处理方法,想起来可能觉得思路比较简单,其实不然,重要的是各种特殊输入的处理。这个问题是leetcode的第四个问题,有1047个case,其中最后俩case特别不容易考虑到,以下代码中有涉及到。对于常规的几个点,比如数据转换使用 value = value * 10 + ch - '0'
,可能出现的数据越界超出整型范围,value中间值采用double,最后判断和转换到整型;符号问题是比较复杂的考虑情况,也需要注意处理。如下实现代码,leetcode 获得通过,有优化空间,部分case的覆盖不太简洁。
/**
* created by igoso at 2018/1/21
**/
public class Leet4 {
public static void main(String[] args) {
System.out.println(myAtoi(" +aaa32"));
System.out.println(myAtoi(" -0012a42"));
System.out.println(myAtoi(" - 123"));
}
public static int myAtoi(String str) {
if (null == str || str.isEmpty()) {
return 0;
}
int flag = 1;
double value = 0;
int mod = 1;
int valid =1;
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (mod > 2) {
return 0;
}
if (ch == '+' && value == 0) {
flag = 1;
mod++;
valid++;
continue;
}
if (ch == '-' && value == 0) {
flag = -1;
mod++;
valid++;
continue;
}
if (ch == ' ' && value != 0) {
break;
}
if (ch == ' ' && value == 0) {
if (valid > 1) {
break;
}
continue;
}
if (ch >= '0' && ch <= '9') {
value = value * 10 + ch - '0';
valid++;
continue;
} else if (value != 0) {
break;
}
return 0;
}
value = value * flag;
if (value >= Integer.MAX_VALUE) {
value = Integer.MAX_VALUE;
}
if (value <= Integer.MIN_VALUE) {
value = Integer.MIN_VALUE;
}
return (int) value;
}
}
感谢阅读。