ASCII码160的空格无法使用trim()方法去除的问题:
今天导入excel数据的时候,手机号码一直报格式错误无法导入,正则表达式完全没有问题,经过排查是由于导入的手机号码末尾有空格,但是这些空格是无法通过trim()去除掉,然后我查看这空格ASCII码居然是160(不间断空格non-breaking space)!
在线查询ASCII码链接: https://www.qqxiuzi.cn/bianma/ascii.htm
我做的一个实践示例代码:
public static void main(String[] args) {
// 11号手机号码,后面有三个不间断空格( 造成的,Ascii码为160)和最后一个正常的空格(中英文半角全角空格都行!Ascii码为32)
String tel = "17852255001 ";
String temp;
System.out.println("11位手机号码加3个不间断空格加1个正常空格:" + tel.length());
System.out.println("11位手机号码加3个不间断空格加1个正常空格.trim(),只能去掉正常的空格:" + tel.trim().length());
// 替换所有的不间断空格,也可以用正则(这就不写了!)
temp = tel.replaceAll("\\u00A0+", "");
System.out.println("11位手机号码加3个不间断空格加1个正常空格,replaceAll去掉了3个不间断空格:" + temp.length());
System.out.println("11位手机号码加3个不间断空格加1个正常空格,replaceAll去掉了3个不间断空格,trim()去掉1个正常空格:" + temp.trim().length());
// ###########################################################
// #
// # https://www.qqxiuzi.cn/bianma/ascii.htm 可以查Ascii码
// #
// ########################################################
// 1. 英文模式下的(半角)空格,能用trim()去除掉, 对应的ASCII码为 32
String space1 = " ";
// 2. 中文模式下的(全角)空格,能用trim()去除掉, 对应的ASCII码为 32
String space2 = " ";
// 3. 网页由 生成的空格(学名:不间断空格 non-breaking space),不能用trim()去除掉, 对应的ASCII码为 160
String space3 = " ";
System.out.println("英文(半角)空格.trim()后的length: " + space1.trim().length());
System.out.println("中文(全角)空格.trim()后的length: " + space2.trim().length());
System.out.println("不间断空格.trim()后的length: " + space3.trim().length());
}
输出结果:
11位手机号码加3个不间断空格加1个正常空格:15
11位手机号码加3个不间断空格加1个正常空格.trim(),只能去掉正常的空格:14
11位手机号码加3个不间断空格加1个正常空格,replaceAll去掉了3个不间断空格:12
11位手机号码加3个不间断空格加1个正常空格,replaceAll去掉了3个不间断空格,trim()去掉1个正常空格:11
英文(半角)空格.trim()后的length: 0
中文(全角)空格.trim()后的length: 0
不间断空格.trim()后的length: 1