这题说实话不是很难,但是需要考虑的情况比较多,需要多提交几次才能悟出门道。
(1)判断str长度
(2)有小数点的话只取小数点之前一段
(3)去掉空格后判断第一个字符是否是(数字,+,—)中的一个
(4)若第一个字符为±,则之后要为数字
(5)越界问题,这个可以用异常来判断
代码献上,请多多指教
public int myAtoi(String str) {
if (str.length() == 0) {
return 0;
}
String temp = null;
if (str.contains(".")) {// 如果有小数点,则只是判断小数点前面的部分
temp = str.substring(0, str.indexOf("."));
} else {
temp = str.trim();// 去掉前后的空格
}
if (temp.length() == 0) {// 判断去掉空格之后,temp的长度是否是0
return 0;
}
char[] chars = temp.toCharArray();
StringBuffer buffer = new StringBuffer();
if (!(chars[0] == '-' || chars[0] == '+' || (chars[0] >= '0' && chars[0] <= '9'))) {// 第一个字符不为-+则返回0
return 0;
}
if (chars[0] == '-' || chars[0] == '+') {// +-号之后要为数字,否则返回0(当然要判断一下长度,防止越界)
if (chars.length == 1) {
return 0;
} else {
if (!(chars[1] >= '0' && chars[1] <= '9')) {
return 0;
}
}
}
buffer.append(chars[0]);
for (int i = 1; i < chars.length; i++) {// 循环判断1之后的字符是否是数字,是数字则转入buffer
if (!(chars[i] >= '0' && chars[i] <= '9')) {
break;
} else {
buffer.append(chars[i]);
}
}
if (isInt(buffer.toString())) {// 判断是否越界,可以用异常来判断
return Integer.parseInt(buffer.toString());
} else {
if (chars[0] == '-') {
return Integer.MIN_VALUE;
} else {
return Integer.MAX_VALUE;
}
}
}
public boolean isInt(String s) {
try {
Integer.parseInt(s);
return true;
} catch (NumberFormatException e) {
return false;
}
}