LeetCode:字符串转整数 (atoi)

这题说实话不是很难,但是需要考虑的情况比较多,需要多提交几次才能悟出门道。

(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;
		}
	}

你可能感兴趣的:(算法)