空格与特殊空格

  问题遇到的场景:用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+', " ");  //匹配多个特殊空格

  

posted @ 2020-07-08 15:16  家门口卖萌  阅读(322)  评论(0编辑  收藏  举报