空格与特殊空格
问题遇到的场景:用FastJson将一个json字符串转换成JSONObject对象后,获取该JSONObject对象中的日期数据(String类型)-> "2020-07-08 05:04:45"。在用DateTimeFormatter将日期数据转换成LocalDateTime对象过程中报错了,错误如下:
错误指在index 10的位置,即空格位置,然后就纳闷了......不就是一个空格嘛
尝试手动删掉了这个空格,再用键盘重新输入一个空格,发现竟然没报错。终于意识到这两个空格不是同一个东西!
决定输出ascii码看下究竟。
这跟我们平时接触到的空格(ascii码为32)确实不一样,查阅一番之后,发现这个ASCII值为160的空格,其实是不间断空格(non-breaking space),就是页面上用 所产生的空格。由于我需要把带这个特殊空格的日期数据转成LocalDateTime对象,所以想到的办法就是将这个特殊空格替换掉。
但发现这个特殊空格无法被正则表达式的\s所匹配(查阅后发现除不能被\s匹配之外,特殊空格还无法被trim()所裁剪,也无法被StringUtils的isBlank()所识别),需要使用Unicode编码来移除它,其编码为\u00A0。
解决如下:
dateStr.replaceAll('\\u00A0', " "); //匹配单个特殊空格 dateStr.replaceAll('\\u00A0+', " "); //匹配多个特殊空格