java数值字符转Integer报错Exception in thread "main" java.lang.NumberFormatException: For input string: "12

很神奇的,明明就是数字啊,为什么就是要要报错呢

Exception in thread "main" java.lang.NumberFormatException: For input string: "12"
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at com.simple.Test.main(Test.java:18)

我也是找了研究了两个多小时,各种方法测试,在出错代码的上一行加一个写死的数字字符并转换,不报错

然后突然灵光一闪,为什么不把它转换程字符数组看一下呢

然后就转换成字符数组,断点看了一下,很神奇,第一个字符什么鬼,换行?空的?空格?好像都不是

java数值字符转Integer报错Exception in thread

怀疑是空格,用trim()方法去空格,不行,然后想怎么样子能知道它是个什么字符呢

然后想到Unicode编码,把它弄成Unicode编码瞅瞅,然后就尝试写一下

结果是这样的

java数值字符转Integer报错Exception in thread

feff  ???这是啥?为什么会有这个,为了知道它具体值啥,就搜索了Unicode在线转换网站http://www.jsons.cn/unicode/转换了,可是啥也没有,不开心,什么鬼,啥也没有,replace方法也用不了,怎么才能去掉呢,难道这个就没有任何办法了

java数值字符转Integer报错Exception in thread

然后想了一下,正则表达式是不是可以匹配Unicode编码,然后尝试了一下replaceAll("\ufeff"),竟然可以,真的是把我给高兴的啊,难以用语言形容。

然后下班回家之后想在现问题,按照公司的操作步骤一步一步来,什么鬼,怎么可能,为啥重现不了,这bug还认电脑???这么神奇???

直到我找到了这篇博客https://blog.csdn.net/weixin_30868855/article/details/101523210,utf-8 bom编码是什么鬼???

然后我就在电脑上把新建的那个txt文件用记事本打开,然后另存为,改编码格式

java数值字符转Integer报错Exception in thread

还真有一个编码  带有BOM的UTF-8  的编码???(自带黑人问号)

好吧,然后改了一下编码格式,重新运行了一下,嗯,完美的重现了那个bug,还是印证那句话 “没有概率出现的bug,只要条件满足,所有概率出现的bug都是必然出现的” 

嗯?结束了???

重要的是解决方法,有时候看起来一样的可能还真的不一样,要想办法把不一样的地方找出来(找不同?)
比如看起来一样的字符串运行起来结果就是不同,就可以把两个看起来一样的字符串转换为字符数组,也许真的不一样呢

有空加个群(517413713)讨论讨论您遇到的奇葩问题呗,解决了就分享一下是怎么解决的呗,等您哦

你可能感兴趣的:(小工具)