在常规操作,去除字符串空格处理中,会遇到一种空格,无法使用常规操作进行删除。解决如下:
import org.apache.commons.lang3.StringUtils;
public class SpecialSpace {
public static void main(String[] args) {
String value="姓名 ";//特殊空格
String mm="地址 ";//正常空格
value= StringUtils.deleteWhitespace(value);
System.out.println(value);
mm= StringUtils.deleteWhitespace(mm);
System.out.println(mm);
char a =' ';//特殊空格
System.out.println((int)a);
char b =' ';//正常空格
System.out.println((int)b);
String str = "hello ";
str = str.replace("\u00A0", "");//特殊空格替换处理
System.out.println(str);
}
}
描述如下:
原因:是因为这个读取到的不是Java常见的空格字符,而是特殊的空格(ASCII值160,严格来说这个是扩展ASCII值的部分,因为原生ASCII最大只到127),因此不能使用常规的替换方式。
平时我们用键盘输入的空格的ASCII值是32,而这个ASCII值为160的空格,其实是不间断空格(non-breaking space),是不是从来没听说过这东东?其实你平时一定也用过很多次的,就是页面上的 所产生的空格。
不间断空格non-breaking space的缩写正是nbsp。
但是不间断空格有个问题,就是它无法被trim()所裁剪,也无法被正则表达式的\s所匹配,也无法被StringUtils的isBlank()所识别,也就是说,无法像裁剪寻常空格那样移除这个不间断空格。
我们可以利用不间断空格的Unicode编码来移除它,其编码为\u00A0。
网友评论