字符串 String 的 trim方法与strip方法 去掉前后空白

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 编程–

特殊空白符

除了常见的空格空白,还有一些空白类似回车、换行等也属于空白符,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() 能处理多种空格,它处理的范围是小于 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

在 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

StringUtils 中 strip() 与 JDK 11 中 strip() 方法都使用到了Character.isWhitespace 来准备判断空白符。

转载请注明出处:码谱记录 » 字符串 String 的 trim方法与strip方法 去掉前后空白
标签: