Java笔记-Java的trim方法去除不掉空格的时候

问题背景:

一般Java项目里,当我们需要做一些数据过滤的时候,往往通过trim方法对数据进行首尾空格删除,然后再通过判断length的长度是否等于0来判断数据是否为空。但是,有时候会出现这样的神奇问题,用该方法过滤不掉某些为空的字符串。如此,一般就是掉进全角空格和半角空格的坑里面了。

我们来看一下全角空格和半角空格的定义,一般情况,我们不会太关注这个问题:

全角和半角区别:一个汉字字符在电脑上要占两个英文字符的位置,当你输入符号的时候全角的字符也是要占两个英文字符的位置,半角的只占一个字符也就是半个汉字的位置。这就是全角和半角的区别。通常的英文字母、数字键、符号键都是半角的,半角的显示内码都是一个字节。半角全角主要是针对标点符号来说的,全角标点占两个字节,半角占一个字节。而不管是半角还是全角,汉字都还是要占两个字节,在编程序的源代码中只能使用半角标点(不包括字符串内部的数据)。

  • 全角空格
    占了两个英文字符的位置
  • 半角空格
    只占一个英文字符的位置

我们再来看下Java的trim方法:

trim方法只能去除首尾的半角空格,对全角空格无效

For Example:

String space1 = " "; // 全角空格,输入法把全角勾上,就可以打出全角字符
String space2 = " "; // 半角空格
System.out.println(space1.trim().length); // 2
System.out.println(space2.trim().length); // 0

解决方案:

  • 方法一
    使用正则表达式,将全角替换为半角,再使用trim方法。
parameter.replaceAll("[ | ]", " ").trim().length() == 0
  • 方法二
    直接正则表达式,去除全角空格,再使用trim方法
parameter.replaceAll("\\s","")

你可能感兴趣的:(Java笔记-Java的trim方法去除不掉空格的时候)