为何两行代码差异可消除NumberFormatException运行时错误?
问题解答:为何两行代码解析数字时表现不同?
嘿,这个问题的答案其实就藏在你的报错信息里!咱们一步步拆解来看:
报错的核心原因
你看报错提示里明确写着:NumberFormatException: For input string: "32363 " —— 注意这个字符串末尾带了个空格!
Integer.parseInt()方法对输入字符串的要求很严格:必须是纯数字组成的字符串,不能包含任何空白字符(空格、制表符、换行符都算)。当你直接用br.readLine()读取输入时,得到的字符串里带着多余的空白,parseInt没法识别这种“带尾巴”的数字,自然就抛出了格式异常。
修复代码的关键作用
而br.readLine().replaceAll("\\s+","")这行代码做了最关键的一步处理:
replaceAll("\\s+", "")会把字符串中所有的空白字符(不管是开头、结尾还是中间的一个或多个空白)全部替换成空字符串。- 比如原本的输入是
"32363 ",经过替换后就变成了干净的纯数字字符串"32363",这下Integer.parseInt()就能正常解析了。
补充小技巧
如果只是首尾有空白,用trim()方法也能解决问题(比如br.readLine().trim()),但replaceAll("\\s+","")的适用范围更广——如果输入字符串中间夹杂着空白(比如"32 363"),它也能把所有空白都去掉,转换成连续的数字字符串,而trim()只能处理首尾的空白。
内容的提问来源于stack exchange,提问作者Aman Kumar
相关产品推荐
相关产品推荐

