1、题目描述:写一个函数,实现将字符串转换成整数的功能,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。
2、思路:这道题首先要想出具体该怎么做,然后再考虑非法输入。
首先这道题需要纠结的一点就是输入字符串的首字符可能是“+”、“-”、“数字”,这三种情况是不一样的,若首字符是正负号,计算的时候就要特殊处理。首字符是数字,即正数省略符号。考虑好这个其余的计算就是按位去遍历字符串,然后每遍历一位就乘以10,然后加上上一位。即可。最后再考虑非法输入:
非法输入要考虑全,这道题思路不难,单纯就是为了考察一个人编程的习惯,是否对代码的鲁邦性有过深入的思考,避免在实际工作中经常性的写bug:
(1)字符串可能为null或者为“”,若不判断,程序数组为越界。
(2)字符串的前后可能存在空格,若不去掉,也会报错。
(3)字符串首字符,到底是+,-,数字
(4)字符串里面字符不是数字,直接非法返回0.
(5)字符串转换之后超出 int 范围,这样会报错。
3、代码:
扫描二维码关注公众号,回复:
8722533 查看本文章
public class Solution { public int StrToInt(String str) { if (str == null || str.length() == 0) { return 0; } str = str.trim(); if (str.length() == 0) { return 0; } boolean flag = false; long result = 0; char firstChar = str.charAt(0); if (firstChar == '+') { flag = false; } else if (firstChar == '-') { flag = true; } else if (firstChar >= '0' && firstChar <= '9') { result = firstChar - '0'; } for (int i = 1; i < str.length(); i++) { char ch = str.charAt(i); if (ch >= '0' && ch <= '9') { result *= 10; result += ch - '0'; } else { return 0; } } if (flag) { result = -result; } if (result > Integer.MAX_VALUE || result < Integer.MIN_VALUE) { return 0; } return (int) result; } }