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

 更新时间:2025年12月26日 08:55:36   作者:.猫的树  
这篇文章主要介绍了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()无法去除空格内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解idea从git上拉取maven项目详细步骤

    详解idea从git上拉取maven项目详细步骤

    这篇文章主要介绍了详解idea从git上拉取maven项目详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java打包可执行JAR文件的三种方式详解

    Java打包可执行JAR文件的三种方式详解

    很多 Java 开发者都遇到过这样的问题,一打包就报错 ClassNotFoundException,其实这就是JAR 包没打好,下面我们就来看看Maven打可执行 JAR 的三种详细方法吧
    2025-12-12
  • redisson.tryLock()参数的使用及理解

    redisson.tryLock()参数的使用及理解

    这篇文章主要介绍了redisson.tryLock()参数的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • ResponseBodyAdvice踩坑及解决

    ResponseBodyAdvice踩坑及解决

    这篇文章主要介绍了ResponseBodyAdvice踩坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Java实现计算机程序设计思路

    Java实现计算机程序设计思路

    这篇文章主要为大家介绍了Java实现计算机程序设计思路,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • Sharding Jdbc批量操作引发fullGC解决

    Sharding Jdbc批量操作引发fullGC解决

    这篇文章主要为大家介绍了Sharding Jdbc批量操作引发fullGC解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 解决spring-data-jpa 事物中修改属性自动更新update问题

    解决spring-data-jpa 事物中修改属性自动更新update问题

    这篇文章主要介绍了解决spring-data-jpa 事物中修改属性自动更新update问题,具有很好的参考价值,希望对大家
    2021-08-08
  • Mybatis使用注解实现复杂动态SQL的方法详解

    Mybatis使用注解实现复杂动态SQL的方法详解

    当使用 MyBatis 注解方式执行复杂 SQL 时,你可以使用 @Select、@Update、@Insert、@Delete 注解直接在接口方法上编写 SQL,本文给大家介绍了Mybatis如何使用注解实现复杂动态SQL,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2023-12-12
  • springboot实现jar运行复制resources文件到指定的目录(思路详解)

    springboot实现jar运行复制resources文件到指定的目录(思路详解)

    这篇文章主要介绍了springboot实现jar运行复制resources文件到指定的目录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Springboot整合Mybatis传值的常用方式总结

    Springboot整合Mybatis传值的常用方式总结

    今天给大家带来的是关于Springboot的相关知识,文章围绕着Springboot整合Mybatis传值的常用方式展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06

最新评论