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()无法去除空格内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java的三种代理模式简述

    Java的三种代理模式简述

    这篇文章主要简述Java的三种代理模式,java的代理模式主要包括静态代理、动态代理、Cglib代理,感兴趣的小伙伴可以参考下面文章的具体内容
    2021-09-09
  • Java如何在临界区中避免竞态条件

    Java如何在临界区中避免竞态条件

    这篇文章主要介绍了Java如何在临界区中避免竞态条件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • SpringBoot@Aspect 打印访问请求和返回数据方式

    SpringBoot@Aspect 打印访问请求和返回数据方式

    这篇文章主要介绍了SpringBoot@Aspect 打印访问请求和返回数据方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Java实现滑动验证码的示例代码

    Java实现滑动验证码的示例代码

    这篇文章主要介绍了Java实现滑动验证码的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • SpringBoot3 Spring WebFlux简介(推荐)

    SpringBoot3 Spring WebFlux简介(推荐)

    SpringWebFlux是Spring Framework 5中引入的响应式Web框架,用于支持非阻塞异步通信和响应式流处理,与传统的SpringMVC相比,WebFlux提供了完全异步非阻塞的编程模型,适用高并发、微服务架构和实时数据流,本文介绍SpringBoot3 Spring WebFlux简介,感兴趣的朋友一起看看吧
    2024-10-10
  • spring启动后保证创建的对象不被垃圾回收器回收

    spring启动后保证创建的对象不被垃圾回收器回收

    最近看到一个问题是,spring在启动后如何保证创建的对象不被垃圾回收器回收?。所以本文结合jvm的垃圾回收机制和spring中的源代码做出自己的一点猜测。有需要的朋友们可以参考借鉴。
    2016-09-09
  • Java线程之锁对象Lock-同步问题更完美的处理方式代码实例

    Java线程之锁对象Lock-同步问题更完美的处理方式代码实例

    这篇文章主要介绍了Java线程之锁对象Lock-同步问题更完美的处理方式代码实例,还是挺不错的,这里分享给大家,需要的朋友可以参考。
    2017-11-11
  • Java回调机制解读

    Java回调机制解读

    本文主要介绍了Java回调机制的相关知识,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • Java线程之间通信的几种方式详解

    Java线程之间通信的几种方式详解

    在 Java 中,线程之间的通信是通过共享内存模型来实现的,线程通过共享的对象和变量来交换数据,为了确保线程间通信的正确性,Java 提供了一系列机制来实现线程安全、同步和通信,以下是常用的几种线程间通信的方式,以及它们的使用方法和场景,需要的朋友可以参考下
    2025-03-03
  • Java中关于size()>0 和isEmpt()的性能考量

    Java中关于size()>0 和isEmpt()的性能考量

    这篇文章主要介绍了Java中关于size()>0 和isEmpt()性能考量,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02

最新评论