String.trim()消除不了空格的问题及解决

 更新时间:2023年07月17日 09:06:16   作者:周英雄  
这篇文章主要介绍了String.trim()消除不了空格的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

String.trim()消除不了空格

项目中在后台处理空格的时候使用trim()方法没起效果

解决方法

transUserName.replaceAll("\\u00A0","");

原因:

前台传过来的是用html转义字符 生成的全角空格,而trim()方法只能消除半角的空格。

扩展

查看源码如下

  /**
   * @return A string whose value is this string, with any leading and trailing white
   *     space removed, or this string if it has no leading or
   *     trailing white space.
   */
  public String trim() {
    int len = value.length;
    int st = 0;
    char[] val = value;  /* avoid getfield opcode */
    while ((st < len) && (val[st] <= ' ')) {
      st++;
    }
    while ((st < len) && (val[len - 1] <= ' ')) {
      len--;
    }
    return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
  }

原文的”white space“中文直译为”留白“或”空白“,但是常见文档一般翻译为”空格“,而空格的英文一般应译为”blank”或”space”,所以这块容易引起歧义。

心得:

trim()方法实际上trim掉了字符串两端Unicode编码小于等于32(\u0020)的所有字符,而全角空格\u00A0的Unicode编码为12288。

String.trim()方法说明

API说明

trim

public String trim()返回字符串的副本,忽略前导空白和尾部空白。 

如果此 String 对象表示一个空字符序列,或者此 String 对象表示的字符序列的第一个和最后一个字符的代码都大于 '\u0020'(空格字符),则返回对此 String 对象的引用。 

否则,若字符串中没有代码大于 '\u0020' 的字符,则创建并返回一个表示空字符串的新 String 对象。 

否则,假定 k 为字符串中代码大于 '\u0020' 的第一个字符的索引,m 为字符串中代码大于 '\u0020' 的最后一个字符的索引。创建一个新的 String 对象,它表示此字符串中从索引 k 处的字符开始,到索引 m 处的字符结束的子字符串,即 this.substring(k, m+1) 的结果。 

此方法可用于截去字符串开头和末尾的空白(如上所述)。 

返回:

此字符串移除了前导和尾部空白的副本;如果没有前导和尾部空白,则返回此字符串。

示例代码

 
    /**  
     * @Title: TrimTest.java
     * @Package com.burns
     * @Description: TODO(用一句话描述该文件做什么)
     * @author 35725
     * @date 2019年11月29日 上午11:45:17 
     * @version V1.0  
     */
package com.burns;
    /**
     * @ClassName: TrimTest
     * @Description: TODO(这里用一句话描述这个类的作用)
     * @author 35725
     * @date 2019年11月29日
     *
     */
public class TrimTest {
	public static void main(String[] args) {
		String s= " 1 1 2  3   ";
		System.out.println("trim方法执行之后>>>>"+s.trim()+"<<<<");
		System.out.println("源字符串:>>>>"+s+"<<<<<<");
	}
}

执行结果

trim方法执行之后>>>>1 1 2  3<<<<
源字符串:>>>> 1 1 2  3   <<<<<<

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring Cloud Feign性能优化代码实例

    Spring Cloud Feign性能优化代码实例

    这篇文章主要介绍了Spring Cloud Feign性能优化代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • Spring Boot中如何使用Convert接口实现类型转换器

    Spring Boot中如何使用Convert接口实现类型转换器

    这篇文章主要介绍了Spring Boot中使用Convert接口实现类型转换器的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java8 Stream流逐行处理文本文件

    java8 Stream流逐行处理文本文件

    这篇文章主要介绍了java8 Stream流逐行处理文本文件的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • Java中的AQS同步队列问题详解

    Java中的AQS同步队列问题详解

    AQS 提供一套基础的机制来实现线程的同步、阻塞与唤醒、等待队列等功能,也就是想要深入学习线程工具类,这个同步队列就必须得掌握,这篇文章主要介绍了Java中的AQS同步队列问题,需要的朋友可以参考下
    2022-06-06
  • 详解Jenkins 实现Gitlab事件自动触发Jenkins构建及钉钉消息推送

    详解Jenkins 实现Gitlab事件自动触发Jenkins构建及钉钉消息推送

    这篇文章主要介绍了Jenkins 实现Gitlab事件自动触发Jenkins构建及钉钉消息推送,应该会对大家学习Jenkins有所启发
    2021-04-04
  • 2022 最新 IntelliJ IDEA 详细配置步骤演示(推荐)

    2022 最新 IntelliJ IDEA 详细配置步骤演示(推荐)

    作为一名开发人员,第一肯定是选择一款趁手的开发利器,本人使用 Java 偏多,这里推荐使用 IntelliJ IDEA, 俗称神级开发工具,具体的安装过程就不过多赘述了,有需要了解的朋友可以参考下本文
    2022-09-09
  • jdbc连接数据库实例详解

    jdbc连接数据库实例详解

    在本篇内容里小编给大家分享了关于jdbc如何连接数据库的相关知识点内容,需要的朋友们学习下。
    2019-02-02
  • Spring容器注入bean的几种方式详解

    Spring容器注入bean的几种方式详解

    这篇文章主要介绍了Spring容器注入bean的几种方式详解,@Configuration用来声明一个配置类,然后使用 @Bean 注解,用于声明一个bean,将其加入到Spring容器中,这种方式是我们最常用的一种,需要的朋友可以参考下
    2024-01-01
  • java正则表达式学习笔记之命名捕获

    java正则表达式学习笔记之命名捕获

    这篇文章主要为大家详细介绍了java正则表达式中的命名捕获,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • 一文看懂RabbitMQ消息丢失如何防止

    一文看懂RabbitMQ消息丢失如何防止

    这篇文章主要介绍了RabbitMQ消息丢失的场景,以及如何保证信息不丢失,看完这篇文章一定可以帮助你RabbitMQ有更深的理解,需要的朋友可以参考下
    2023-03-03

最新评论