在处理某次excel导入的线上问题过程中,用户反馈某条数据的两个数字内容在导入之后的数据不正常,该数据的这两个字段值未导入库。(库中为默认的0)
拿到该用户导入的excel进行本地debug,发现在String.valueOf()转字符串的时候这两个参数的值发生了NumberFormartException(至今我也没明白为啥会抛出这个异常)。忽略这个问题,在debug过程中发现该数字字符串的最后有一个空格符,该空格符在char数组中的显示其ASCII码为160,这就觉得不对劲,正常的空格的ASCII码应该是32,这样就可以通过trim()方法将其过滤。但是该空格无法使用trim方法将其过滤。然后查阅相关资料,知道ASCII码为160的空格名为non-breaking space(不间断空格),该空格的作用是保证在页面换行时不被打断。例如:
页面某一行的末尾是一个人名Li Si;
我们希望在换行时人名不会被打断,导致Zhang 在第一行末尾,而Xiaoming跑到第二行开头,而是保持完整的人名在同一行的末尾,于是就有了不间断空格。(在word中也有这种空格的使用)
如果使用了平常的空格,就会被页面压缩,变成下边这样:
页面某一行的末尾是一个人名Li
Si
解决方式:
str.replaceAll("[\\s\\u00A0]+", "");
str.replace("\u00A0", "");