字符串中的空格trim不起作用,一步debug教你直观的看到why

本文深入探讨Java中字符串的底层实现,特别是不同空格字符的处理方式,包括普通空格和全角空格的区别,以及如何正确使用trim()和replaceAll()方法去除这些空格。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提知识

  • 字符串底层是char数组 1char=2Byte=16bit
  • 字符是根据不同类型的编码映射的,类似于字典.Java默认Unicode编码
  • 在Java中你写’a’和(char)97 是一样的,不懂看看编码表

代码+原理 讲解

  1. 示例代码

    // example
    	String a ="a";
        String b =" 半角空格(普通的) 半角空格但不换行"+(char)160;
        a.concat(b);
        // 注意 trim 是不能去除后面那个空格
        b.trim();
        // 转为char数组 或者直接debug 均可看到 底层结构
        char[] chars = b.toCharArray();
        System.out.println(chars);
        System.out.println(a);
        System.out.println(b);
    

    debug截图:
    分析:在trim之后我们发现 1 处已经没有了,2 处仍旧存在,但是是我们手打的’ ‘,3 处是我们定义的(char)160,很明显.我们trim的两边的空格左边已经完成了,右边失败了.
    . . . . . 但是我们已经找到了这两个空格是不同的. 他们分别是 (char)32 和(char)160;同时得出trim也是替换的(char)32.看源码截图:
    在这里插入图片描述
    注意:不要自作聪明 用replaceAll(’ ‘); 你这不是一样的只替换掉数组中的(char)32位置吗?要使用replaceAll((char(160)+’’));这样就行了
    在这里插入图片描述

  2. 额外的
    . . . . 你还可以看到汉字’半’他是一个char.但是UNICODE编码.

  3. 附加常用特殊字符参考

   	/**普通的英文半角空格Unicode编码*/
   private static final int SPACE_32 = 32;

   /**中文全角空格Unicode编码(一个中文宽度)*/
   private static final int SPACE_12288 = 12288;

   /**普通的英文半角空格但不换行Unicode编码(==   ==   == no-break space)*/
   private static final int SPACE_160 = 160;

   /**半个中文宽度(==   == en空格)*/
   private static final int SPACE_8194 = 8194;

   /**一个中文宽度(==   == em空格)*/
   private static final int SPACE_8195 = 8195;

   /**四分之一中文宽度(四分之一em空格)*/
   private static final int SPACE_8197 = 8197;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值