Java 11中,引入了String类的新方法strip(), 它与传统的trim()方法在功能上很相似,都用于去除字符串两端的空白字符。使用trim()时,仅能去除字符串两端的ASCII空格和控制字符。使用strip()时,可以去除字符串两端的所有Unicode空白字符,包括但不限于空格、制表符等,这使得strip()在处理国际化文本时更为有效。

1、trim()方法不足之处

trim()方法在Java早期版本就被引入。

它仅去除字符串两端的ASCII空格字符(即字符码为32的空格)以及字符码小于等于U+0020的控制字符。

不识别并去除Unicode空白字符。支持Unicode的空白字符的判断应该使用isWhitespace(int)

也就是trim()方法无法删除掉Unicode空白字符,但用Character.isWhitespace(c)方法可以判断出来。

2、strip()方法

strip()方法是在Java 11中引入的。它能去除字符串两端的所有Unicode空白字符,根据Character.isWhitespace方法来识别空白字符。也就是strip()能处理的空白字符不仅仅限于ASCII字符集,还包括了其他字符集中的空白字符,使得这个方法在国际化处理上更为有用。

public static void main(String[] args) {
    String s = "\t abc \n";
       System.out.println( "abc".equals(s.trim()));//true
       System.out.println("abc".equals(s.trim()));//true
       Character c = '\u2000';
       String s1 = c + "abc" + c;
       System.out.println(Character.isWhitespace(c));//true
       System.out.println(s1.equals(s1.trim()));//true
       System.out.println("abc".equals(s1.strip()));//true
}

注意:输出结果都是trueCharacter c = '\u2000';中'\u2000'就是Unicdoe空白字符。