思路:合法字符的话,取得该位数字并不断*10相加
注意:
- 输入的是非法字符,null,,有非数字的字符
- 输入的有正负号
- 只输入+,-
- 有没有超出最大最小的整数
public class Solution { public int StrToInt(String str) { boolean legal ;//是否合法输入 if(str == null || str.length() == 0){ return 0; } String s = str.trim();//去掉首位字符 int len = s.length(); int sign = 1;//符号标志位,1为正 int result = 0;//返回的结果 int limit= Integer.MAX_VALUE;//整数最大值/最小值 int i = 0;//遍历字符每个元素 //第一个字符非数字,只有一个符号时 if(s.charAt(0) < ‘0‘){ if(s.charAt(0) == ‘-‘) { limit = Integer.MIN_VALUE; sign = -1; } else if (s.charAt(0) != ‘+‘) { return 0; } if(len == 1) { return 0; } i++;// } while(i < len){ int c = s.charAt(i) - ‘0‘; if(c >= 0 && c <= 9){ //溢出处理 if(sign > 0 && (result > limit / 10 ||(result == limit / 10 && c > limit % 10))){ return 0; } else if (sign < 0 && (result > -(limit / 10) || (result == -(limit / 10) && c > -(limit % 10)))){ return 0; } result = result * 10 + c; i++; } else { return 0; } } legal = true; return sign > 0 ? result : -result; } }
测试:
功能测试:输入的字符串为正、负和0
边界值:最大最小的整数
输入null,非法字符,只有一个符号的,数字掺杂非法字符。
时间: 2024-11-03 21:43:05