字符串转int(Integer.parseInt()函数)
在牛客上看到一个字符串转int类型的题目,感觉看上去没什么难度,但是自己做的过程中,对于int越界判断做的较为复杂,翻看了Integer.parseInt()的源码之后,惊叹其清晰的逻辑判断。顺便吐槽下牛客网的测试用例中对于int类型越界判断有些问题,如图:
源码解读:
默认情况下,我们调用parseInt(String s)函数,其默认为十进制,转而调用parseInt(String s, int radix)方法。再次方法中先如下图所示,对字符串是否为空,进制是否小于2,或大于36进行了格式校验。
下面是函数中定义的变量:
result:用于记录中间结果及最终结果
negative:标志字符串表示的数字是否为负数
i:记录转换到了第几位,取值从0-len-1
len:记录字符串长度,
limit:记录结果边界,负数进行表示,能够简化在正负边界处绝对值差1的情况判断。(自己写的代码就没有考虑到这点,先求绝对值再加上符号,导致在MAX和MIN处的判断出现错误,无法输出MIN)
multmin:记录中间结果边界
digit:第i位上的字符转换为对应数字