5分钟了解一下,String.trim()到底做了什么事

23 篇文章 4 订阅
订阅专栏

项目中遇到用String.trim()的地方,点进去看了trim()源码,以前一直以为trim()的作用只是去除字符串中的首尾的“空格”符,但是源码看下来,好像这个说法不太准确呢。
搞技术嘛,严谨一些,在这记录一下,大佬们也瞅瞅哈~

说我们认知的trim()

说到String.trim() 函数 ,就像前言说的一样,我的认知它就是搞首尾空格用的,虽然这个说法也没错哈。

那这都说到这了,不试试看说不过去对吧:

String str = " Hello World ";
System.out.println(str.length());
System.out.println(str.trim().length());

小字都是旁白:“搞掉了吗?看样子是搞掉了。” 所以说它去除首尾空格没毛病哈。
在这里插入图片描述

复习一个小概念

Java 语言规范规定,Java 的 char 类型是 UTF-16 的 code unit,也就是一定是16位(2字节)。
char(字符)的范围是:0-65535 or(\u0000~\uFFFF)
看图看图!
在这里插入图片描述
知乎一个大佬答主的回答: Java 语言中一个字符占几个字节?
我怎么会让各位大佬去看别的链接呢,当然,如果有时间的话,我会单独整理一篇奉上。

养成一个好习惯

养成一个好习惯,多看看源码,其实很多时候,源码里的注释或者源码流程中就已经很好的解释了。
而我们往往很多时候都不愿意去看源码。
小字都是旁白:“源码都是英文,看着都头疼。坚持看完,可解偏头疼哟~”

当然,即使大佬你真的不愿意去看源码。大佬您这都赏脸点进来了,自然由我来说给您听。

在 JDK 1.8 中trim()的源码注释里其实已经解释的很清楚了:
在这里插入图片描述
1. 删除任何前置和后置空格;
2. 如果String对象表示一个空字符,则返回对这个String对象的引用;
总结:【trim()大佬说了:你这有一个二五崽(空格),我换一个新崽给你】
3. 如果String对象表示的字符的首和尾字符的编码都大于’\u0020’(空格字符),则返回对这个String对象的引用;
总结:【trim()大佬说了:空格前后有兄弟,我不搞你】
4. 如果String字符串中没有编码大于’\u0020’的字符,则返回一个表示空字符串的string对象;
总结:【trim()大佬说了:看你可怜,给你送你一个新崽(新String对象,空的,长度为0的)】

5. 假设 k 是代码大于’\u0020’的字符串中第一个字符的索引,假设 m 是代码大于’’\u0020’的字符串中最后一个字符的索引。返回一个表示该字符串的子字符串,该子字符串下标 k 处的字符开始,以下标 m 处的字符结束。即 substring(k, m + 1)。
总结:【trim()大佬说了:前后的二五崽(小于’\u0020’)我都带走,老实崽和有兄弟的二五仔都给你留下了】
6. 如果使用trim()后的字符串长度不等于使用前的长度,就返回一个新崽(新String对象)给你;如果等于,就还给你以前的崽(原String对象)。
总结:【trim()大佬说了:不等于 -> 你这个崽有猫腻(长度变了),给你换一个新崽;等于 -> 你这个崽没得问题,带回去好好养起】

动起来,不瞎掰

示例 1-6 对应了上面6条 trim() 源码说明。实践是实现真理的唯一标准实践是实现,大佬们,我直接开整了哈。

示例1

   /**
	* 1.删除任何前置和后置空格;
	*/
	@Test
	public void str1(){
	   String str = " Hello World ";
	   System.out.println(str.length());
	   System.out.println("trim():" + str.trim().length());
	}

在这里插入图片描述

示例2

   /**
     * 你这有一个二五崽(空格),我换一个新崽给你
     */
    @Test
    public void str2(){
        // 如果String对象表示一个空字符,则返回对这个String对象的引用;
        String str1 = " ";
        System.out.println(str1.length());
        String str2 = str1.trim();
        System.out.println("trim()->" + str2.length());
        System.out.println(str1 == str2);
    }

在这里插入图片描述

示例3

    /**
     * 空格前后有兄弟,我不搞你
     */
    @Test
    public void str3(){
        String str1 = "aaa bbb ccc";
        System.out.println(str1.length());
        String str2 = str1.trim();
        System.out.println(str2.length());
    }

在这里插入图片描述

示例4

  /**
    * 看你可怜,给你送你一个新崽(新String对象,空的,长度为0的)
    */
    @Test
    public void str4(){
        // 你有32个崽;
        char[] chars = new char[32];
        for (int i = 0; i < 32; i++) {
            chars[i] = (char) i;
        }
        String oldStr = new String(chars);
        System.out.println(oldStr.length());
        // 可惜是32个二五崽
        String newStr = oldStr.trim();
        System.out.println(newStr.trim().length());
        System.out.println(oldStr == newStr);
    }

在这里插入图片描述

示例5

   /**
     * 假设 k 是代码大于’\u0020’的字符串中第一个字符的索引,
     * 假设 m 是代码大于’’\u0020’的字符串中最后一个字符的索引。
     * 返回一个表示该字符串的子字符串,该子字符串以下标 k 处的
     * 字符开始,以下标m处的字符结束。即substring(k, m + 1)。
     */
    @Test
    public void str5(){
        // 先准备8个崽
        char[] chars = new char[8];
        // 3个二五崽
        for (int i = 0; i < 3; i++) {
            chars[i] = (char) i;
        }
        chars[3] = 65;
        chars[4] = 66;
        // 二五崽(小于空格符,空格符是32)
        chars[5] = 31;
        chars[6] = 68;
        // 二五崽(小于空格符,空格符是32)
        chars[7] = 21;
        String oldStr = new String(chars);
        System.out.println("oldStr.length():" + oldStr.length());
        System.out.println("oldStr:" + oldStr);
        String newStr = oldStr.trim();
        System.out.println("newStr.length():" + newStr.length());
        System.out.println("newStr:" + newStr);
    }

在这里插入图片描述

示例6

/**
     * 不等于 -> 你这个崽有猫腻(长度变了),给你换一个新崽;等于 -> 你这个崽没得问题,带回去好好养起
     */
    @Test
    public void str6(){
        // 准备5个崽
        char[] chars = new char[5];
        // 3个二五崽
        for (int i = 0; i < 3; i++) {
            chars[i] = (char) i;
        }
        chars[3] = 65;
        chars[4] = 66;
        String str1 = new String(chars);
        String str2 = "ABCDE";

        String newStr1 = str1.trim();
        String newStr2 = str2.trim();


        System.out.println("str1.length():" + str1.length());
        System.out.println("newStr1.length():" + newStr1.length());
        System.out.println(str1 == newStr1);
        System.out.println("=========================\n");

        System.out.println("str2.length():" + str2.length());
        System.out.println("newStr2.length():" + newStr2.length());
        System.out.println(str2 == newStr2);
    }

在这里插入图片描述

5分钟直接看这里

trim()到底做了什么事

  1. 去除 String 中的首尾空格;
  2. 无法去除字符串中间含有空格的;
  3. 准确说实际去除的是小于十进制32(32就是空格,可以去看Ascii表)的所有字符。
  4. String 中全是小于32的字符时,返回一个新的字符给你。
  5. String.trim() 长度变化就是新对象,无变化就还是自己。
    在这里插入图片描述

感谢各位大佬阅读, 随手点赞,日薪过万~!!!

java的strim()方法的实现,ltrim(String str,String substr)和rtrim(String str,String substr)
u014496693的专栏
05-29 2531
package homework;public class TestTrim {public static void main(String[] args) {String str=TestTrim.trim("abc edab", "ab");System.out.println(str);}public static String trim(String str,String substr){
报错记录 | The "path" argument must be of type string.
虎鲸虎鲸
03-15 3997
报错内容 TypeError [ERR_INVALID_ARG_TYPE]: The "path" argument must be of type string. Received type undefined at validateString (internal/validators.js:125:11) at Object.join (path.js:427:7) ...
Stringtrim()方法
qq_43118674的博客
05-15 1026
Stringtrim()方法
java String 去掉特殊字符之前的内容
最新发布
喵手的博客
08-20 857
在处理用户输入、文件路径、URL 或其他文本数据时,我们经常需要对字符串进行清理和格式化。例如,当我们需要提取某个特定字符之后的内容时,就需要去掉该字符之前的所有内容。Java 提供了多种字符串操作方法,可以帮助我们高效地实现这一功能。本文将详细介绍如何在 Java 中去除特殊字符之前的内容,并通过示例代码和具体场景来帮助你更好地掌握这一技能。本文将介绍在 Java 中实现去除字符串中特殊字符之前的内容的几种方法。我们将从基本的字符串操作开始,逐步介绍正则表达式的应用,并提供实际案例来演示这些方法的有效性。
String.Trim()真相大揭秘
weixin_34128534的博客
01-13 1365
部门上次的CodeReview会议上,留下了一道作业题,也是本篇博文所要讲述的:String.Trim()方法到底为我们了什么,仅仅是去除字符串两端的空格吗? 很久很久以前,也就是前几个小时前,我一直以为Trim()方法就是把字符串两端的空格字符给删去,其实我错了,而且错的比较离谱。 首先我们直接用Relector反编译String类,找到Trim()方法: public string T...
String.trim()方法说明
爱的叹息的专栏
11-29 8131
API说明 trim public String trim()返回字符串的副本,忽略前导空白和尾部空白。 如果此 String 对象表示一个空字符序列,或者此 String 对象表示的字符序列的第一个和最后一个字符的代码都大于 '\u0020'(空格字符),则返回对此 String 对象的引用。 否则,若字符串中没有代码大于 '\u0020' 的字符,则创建并返回一个表示空字符串的...
String类的 trim() 方法的基本使用 & 源码解析
Shipley_Leo的博客
06-04 9115
String类的 trim() 方法的基本使用 & 源码解析
Stringtrim的用法
我以我心Coding You
03-06 1292
Stringtrim的用法 package day01; /** * String trim() * 去除当前字符串两边的空白字符 * @author kaixu * */ public class StringDemo5 { public static void main(String[] args) { String str = &quot; Hello &quot;; String ...
54从零开始学JavaString字符串用法详解
一一哥
07-24 251
学习了前面的内容之后,我们知道了一些java中的常用类,比如Object和包装类等,但还有一个类用的更多,这就是String字符串类!所以接下来壹哥会利用一些篇章,来给大家重点讲解一下String的用法,因为这个太常用,也太常考了。虽然我们前面的代码案例中,已经多次使用过String字符串了,感觉也不难,但实际上String字符串的内容是比较多的,需要初学者进行专门的学习,尤其是它的一些底层原理更需要我们来了解。前戏已完,精彩即开始全文大约【5500】
php trim去不掉空格,空格trim不掉问题解决思路
weixin_29887351的博客
03-17 1568
编码规则处理这个问题的理论基础是对编码的理解,对于不同编码的理解也是作为一个码农必备的素质,推荐几篇好文章,读后应该就对编码规则进化了然于胸了,急性子、姿势渊博码农略过。(可以这样理解:Unicode是字符集,UTF-32/ UTF-16/ UTF-8是三种字符编码方案。)trim函数以php的trim函数为例:去除字符串首尾处的空白字符(或者其他字符)string trim ( str...
Flutter String 常用方法
草帽的专栏
09-04 5322
Dart / Flutter字符串方法和运算符教程(含示例) DartString是UTF-16(16位Unicode转换格式)代码单元的序列。它使Dart更强大,可以用任何语言构建我们的移动和Web应用程序。在本教程中,我们将介绍许多有用的Dart字符串方法和运算符。你会知道: 在Dart / Flutter中创建某种字符串的方法 方法从Dart / Flutter中的字符串获取数据 在Dart / Flutter中验证字符串中的数据的基本方法 如何在Dart / Flutter中转换,分割,合并和修
p5.js 编程基础学习合集【2】
升卿
01-16 4701
之前在《 p5.js 和 Processing 的恩怨情仇》曾提及 p5.js 与 Processing 的不同点之一就是: 在 JavaScript 中,变量没有类型。使用 var 而不是 float、int、double、long、char、String、Array 等。我们不需要为函数指定返回类型或参数类型。 var 可以是任何东西——任何提到的类型,也可以是函数。 #...
javastring.trim()函数的使用
读读书,敲敲代码,写写博客,思考思考人生。
07-04 327
trim():去掉字符串首尾空格。 public static void main(String arg[]){            String a=" hello world ";            String b="hello world";            System.out.println(b.equals(a));            a=a.trim()
没那么简单的 String.trim()
After 95
05-26 1311
为什么突然会去看研究 trim() 方法,这是因为昨天因为这个写了个大BUG \捂脸,可能有很多人跟我一样,传说中的 trim() 是去除前后空格,而实际的 trim() 到底是起着什么作用呢?首先我们来看一下这块的源码:原本我一直以为trim() 仅仅只是去除前后空格,实际上清除前后ASCII码小余等于【空格】的所有字符,也就是截图中标红的这部分内容:至于为什么StringBuffer此时的le...
javastring.trim()函数的作用
热门推荐
evilcry2012的专栏
05-27 1万+
javastring.trim()函数的作用2017-05-06 19:22 by 陈建忠, 4142 阅读, 0 评论, 收藏, 编辑trim  /[trɪm] / 英文意思:整理,修理,修剪,整齐的trim()的作用:去掉字符串首尾空格。 public static void main(String arg[]){ String a=" hello world "...
C# String.Trim 方法
^@^lemon tea^@^
11-18 1304
String.Trim 方法
Stringtrim
lvliqiang2012的专栏
12-05 555
package org.struts2.test; public class TestTrim { public static void main(String[] args) { String str=" aa aaa "; System.out.println("|"+str+"|"); str=myTrim(str); System.out
Stringtrim()方法的运用
weixin_43889681的博客
03-19 2672
rim()的作用是去掉字符串两端的多余的空格,注意,是两端的空格,且无论两端的空格有多少个都会去掉,当然 中间的那些空格不会被去掉,如: String s = " a s f g "; String s1 = s.trim(); 那么s1就是就是asfg ,把头尾的空格给删除掉了 trim()不仅可以去掉空格,还能去掉其他一些多余的符号,这些符号分别是: \t \n \v \f ...
String.trim是干什么的
04-21
String.trim()是一个Java语言中的String类方法,用于去除字符串首尾空格(whitespace)。例如: String str = " Hello World! "; String trimmedStr = str.trim(); // "Hello World!" 在这个例子中,去除了字符串首尾空格,就得到了“Hello World!”这个新字符串
写文章

热门文章

  • @JsonFormat 和 @DateTimeFormat 时间格式化注解详解(不看血亏) 39575
  • Docker “pull“命令获取镜像,讲道理你真的会吗? 32144
  • MySQL 错误代码:1055 解决方案(推荐!!) 31033
  • 5分钟了解一下,String.trim()到底做了什么事 22247
  • nrm不是内部或外部命令,也不是可运行的程序 22101

分类专栏

  • 开发工具 1篇
  • 面试题 2篇
  • docker 3篇
  • 设计模式 5篇
  • IDEA 2篇
  • Linux 2篇
  • 消息中间件
  • Java 23篇
  • mysql 10篇
  • mybatis 3篇
  • leetcode
  • 其他 6篇
  • 生活 1篇
  • springmvc 1篇
  • springboot 6篇
  • vue 3篇
  • nodeJS 1篇
  • spring 9篇

最新评论

  • @JsonFormat 和 @DateTimeFormat 时间格式化注解详解(不看血亏)

    zhuzicc: 表情包给你比个心

  • @JsonFormat 和 @DateTimeFormat 时间格式化注解详解(不看血亏)

    m0_73632058: 第100个赞o( ̄▽ ̄)d

  • Java Stream流 List< T >转换Map方法汇总合集(大概是最全吧)

    zhuzicc: 表情包互相学习!

  • MySQL 错误代码:1055 解决方案(推荐!!)

    qq51808864: 牛啊老表表情包

  • Java Stream流 List< T >转换Map方法汇总合集(大概是最全吧)

    阿J~: 你真棒,能教教我吗

最新文章

  • Typora 画图技巧(思维利器,含文本及图示~!)
  • Java8 BiConsumer<T, U> 函数接口浅析分享(含示例,来戳!)
  • Java Stream流 List< T >转换Map方法汇总合集(大概是最全吧)
2024年1篇
2023年8篇
2022年6篇
2021年18篇
2020年40篇
2019年3篇

目录

目录

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhuzicc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

玻璃钢生产厂家福建玻璃钢人物雕塑定制长沙特色玻璃钢雕塑市场宁波仿铜玻璃钢雕塑安装商场走廊美陈迪庆玻璃钢雕塑批发零售景观园林玻璃钢卡通雕塑报价盐城元旦商场美陈东莞会发光的玻璃钢雕塑定做玻璃钢雕塑上色的原因卡通鸡玻璃钢雕塑深圳特色商场美陈价钱德州玻璃钢海豚雕塑定制汕头玻璃钢动物雕塑现货河南标牌标识玻璃钢雕塑设计山东玻璃钢雕塑销售公司商场店庆柜台美陈布置贵阳商场圣诞美陈哪家强洛阳玻璃钢彩绘雕塑制作博乐气球商场美陈装饰哪家有名玻璃钢仿真雕塑行情日照玻璃钢花盆商场圣诞节美陈门头玻璃钢创意造型雕塑ps玻璃钢雕塑效果四川中庭商场美陈费用成都清远玻璃钢卡通雕塑绵阳销售玻璃钢面包雕塑儿童主体雕塑玻璃钢商场专柜春季美陈余杭区玻璃钢雕塑尺寸香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化