在线上业务中,有个校验,校验用户输入的信息与现在表里存的信息数据是否一致。比较时忽略首尾的空字符。
但收到用户反馈,在页面填入的数据和表里存的数据一致。校验却不通过。
假设表里存的是“CSDN专业开发者社区”,用户填写的是“CSDN专业开发者社区 ”,后面带有空格。对于用户输入的数据,已经先用String的trim()方法进行处理了再和表里的数据进行比较。但比较结果却是不相等。把后台日志用户的数据复制粘贴到记事本或者word或者页面,没有发现异常,比如在CSDN插入代码:
public static void main(String[] args) {
String str = "CSDN专业开发者社区 ";
}
但当把数据粘贴到idea上时,结果如下:
打印字符ASCII码,结果如下:
断点String的trim()方法,发现字符的ASCII码小于等于32,末尾的字符才会被过滤掉。而用户输入的空格ASCII码等于160,所以调用trim()方法后字符被保留。
通过打印每个字符的unicode,发现末尾的空格unicode是\u00a0。
\u00a0是不间断空格,常用的String的trim()方法或者StringUtils.trim()方法无法处理,可以通过
replaceAll("\u00A0"," ")替换为普通空格,再用trim()方法。
标签:trim,定位,java,String,字符,用户,空字符,空格,CSDN From: https://blog.csdn.net/csdnzrc/article/details/142863176