java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java trim()无法去除空格

Java中使用trim()无法去除空格的解决方法

作者:.猫的树

这篇文章主要介绍了Java中使用trim()方法无法去除空格的问题,并分析了原因,文章提出了两种解决方案:使用正则表达式替换和使用String.strip()方法,需要的朋友可以参考下

问题描述

今天遇到一个比较怪异的问题,这里简单记录一下:

有个需求是需要去掉字符串后面的空格,我这里使用的是String.trim()

public class Demo1 {
  public static void main(String[] args) {
    String s1 = "空格测试 ";
    System.out.println(s1.trim());
    // 空格测试
  }
}

到这里是不是完全没问题,但是今天发现输入的数据明明带了空格,结果还是没有去掉,没有得到想要的结果。

原因分析:

首先,使用trim方法去掉首位空格是没有问题的。那为什么会出现上述问题呢?

查阅资料后发现,trim方法只能去掉字符串中的ASCII值为32的空格,即半角空格

全角和半角

在输入法中存在全角和半角字符的概念,比如说“逗号”存在“全角逗号和半角逗号”,体现在Unicode中就是两个不同的码位

全角字符

全角字符占3字节,ASCII值为12288,全角字符不能被trim

ASCII -160 特殊空格

该空格为不间断空格(non-breaking space),占2个字节,即前端页面上的 ,同样也不能被trim

也就是说,trim或者replace只能去掉ASCII值为32的空格,而ASCII值为160或全角的空格是无法通过replace或者trim处理的

解决方案:

方法一:使用正则表达式

ASCII编码是160的空格,Unicode对应是\u00A0,使用replace+UNICODE编码\u00A0替换,全角空格(\u3000),使用replace方法+全角空格字符替换,普通空格,使用replace方法+\s替换,正则表达式.replaceAll("([ ]|\\s|\\u00A0)+","")

如下:

public class Demo1 {
  public static void main(String[] args) {
 		String s2 = "全角空格测试 !!";
        System.out.println(s1.replaceAll("([ ]|\\s|\\u00A0)+",""));
        // 全角空格测试!!
  }
}

方法二:使用String.strip()

我这里的问题是全角空格导致的,所以可以使用String.strip()去除字符串前后的“全角和半角”空白字符

public class Demo1 {
  public static void main(String[] args) {
    String s3 = "吃了没\u3000";
    System.out.println(s3.trim().length());
    System.out.println(s3.strip().length());
    // 4 3
    System.out.println(s3.strip());
    // "吃了没"
  }

注意:JDK11中引入String.strip()

到此这篇关于Java中使用trim()无法去除空格的解决方法的文章就介绍到这了,更多相关Java trim()无法去除空格内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文