String 的 trim() 可以将字符串前后的空白字符去除,返回一个新的字符串。
如果字符串中间包含空白,则不能去掉。
trim() 方法
去掉前后空格
public static void main(String[] args) {
String text = " 我爱 JAVA 编程 ";
String trimText = text.trim();
System.out.println("原始的字符串 --" + text + "--");
System.out.println("去空格字符串 --" + trimText + "--");
}
原始的字符串 — 我爱 JAVA 编程 —
去空格字符串 –我爱 JAVA 编程–
去空格字符串 –我爱 JAVA 编程–
特殊空白符
除了常见的空格空白,还有一些空白类似回车、换行等也属于空白符,trim()也能处理它们。
public static void main(String[] args) {
String base = "我爱 JAVA 编程";
String text = " 我爱 JAVA 编程 ";
String trimText = text.trim();
System.out.println("前后含有空格,trim前后 " + trimText.equals(base));
String text2 = "我爱 JAVA 编程\n";
String trimText2 = text2.trim();
System.out.println("前后含有空格,trim前后 " + trimText2.equals(base));
String text3 = "我爱 JAVA 编程\r";
String trimText3 = text3.trim();
System.out.println("前后含有空格,trim前后 " + trimText3.equals(base));
String text4 = "我爱 JAVA 编程\t";
String trimText4 = text4.trim();
System.out.println("前后含有空格,trim前后 " + trimText4.equals(base));
}
前后含有空格,trim前后 true
前后含有空格,trim前后 true
前后含有空格,trim前后 true
前后含有空格,trim前后 true
前后含有空格,trim前后 true
前后含有空格,trim前后 true
前后含有空格,trim前后 true
虽然 trim() 能处理多种空格,它处理的范围是小于 U+0020
的空白,也就是 ASCII 码小于等于 32 的空白符。
在 Unicode 中,还有一些空白符不在这个范围,trim() 就不能处理了。
比如,\u2001
就是一个空白符,我们看下效果:
public static void main(String[] args) {
String base = "我爱 JAVA 编程";
String text = "我爱 JAVA 编程\u2001";
String trimText = text.trim();
System.out.println( text + "trim前后 " + trimText.equals(base));
}
我爱 JAVA 编程 trim前后 false
从结果看,\u2001
已经是空白了,但是 trim()过后和标准值不相等。
strip() 方法
为了解决 trim() 不能处理部分空白符的问题,JKD 引入了strip()方法。
在 JDK 11 中,新增加了 strip() 方法,也就是说如果你的 JDK 版本低于11 ,在 java.lang.String
中是找不到该方法的。
代码比较
public static void main(String[] args) {
String base = "我爱 JAVA 编程";
String text = "我爱 JAVA 编程\u2001";
String trimText = text.trim();
String stripText = text.strip();
System.out.println( text + "trim前后 " + trimText.equals(base));
System.out.println( text + "strip前后 " + stripText.equals(base));
String text2 = "我爱 JAVA 编程\u205F";
String trimText2 = text2.trim();
String stripText2 = text2.strip();
System.out.println( text2 + "trim前后 " + trimText2.equals(base));
System.out.println( text2 + "strip前后 " + stripText2.equals(base));
}
执行结果如下:
我爱 JAVA 编程 trim前后 false
我爱 JAVA 编程 strip前后 true
我爱 JAVA 编程 trim前后 false
我爱 JAVA 编程 strip前后 true
我爱 JAVA 编程 strip前后 true
我爱 JAVA 编程 trim前后 false
我爱 JAVA 编程 strip前后 true
在 JDK 11 中,使用 Character.isWhitespace(int)
去确定字符串前后的空白符是否为真的空白,该方法能最大范围地找出 Unicode 中的空白符,因此识别到的空白符更多。
StringUtils.strip() 方法
如果你的 JDK 版本还不能升级到 JDK 11 以上,可以用 StringUtils 类来代替。
使用方法
在 pom.xml 中添加如下坐标:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>
代码中使用方法 StringUtils.strip()
与 JDK 中 strip() 一致。
public static void main(String[] args) {
String base = "我爱 JAVA 编程";
String text = "我爱 JAVA 编程\u2001";
String stripText = text.strip();
String sstripText = StringUtils.strip(text);
System.out.println( text + "strip前后 " + stripText.equals(base));
System.out.println( text + "strip前后 " + sstripText.equals(base));
}
结果也相同:
我爱 JAVA 编程 strip前后 true
我爱 JAVA 编程 strip前后 true
我爱 JAVA 编程 strip前后 true
StringUtils 中 strip() 与 JDK 11 中 strip() 方法都使用到了Character.isWhitespace
来准备判断空白符。