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

📂 best365官网登录 ⏳ 2025-10-22 00:35:54 👽 admin 👁️ 431 💾 256
5分钟了解一下,String.trim()到底做了什么事

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

💗💗💗您的点赞、收藏、评论是博主输出优质文章的的动力!!!💗💗💗

欢迎在评论区与博主沟通交流!!大量优质博文关注一波不亏!👇🏻 👇🏻 👇🏻

文章目录

说我们认知的trim()复习一个小概念养成一个好习惯动起来,不瞎掰示例1示例2示例3示例4示例5示例6

5分钟直接看这里

说我们认知的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()到底做了什么事

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

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

相关数据包

中国女足将迎来本届世界杯首战(附赛程表)

中国女足将迎来本届世界杯首战(附赛程表)

📅 07-19 🔗 足球365是什么意思
人工智能专业学什么?就业前景如何?2025年最新指南
GTA在线模式萌新指南-资产篇

GTA在线模式萌新指南-资产篇

📅 07-31 🔗 365bet体育在线游戏
英雄联盟典藏皮肤有哪些?

英雄联盟典藏皮肤有哪些?

📅 08-29 🔗 best365官网登录
← 原神的酒庄迪卢克在哪 原神的酒庄迪卢克位置解析 钢琴键盘对照表-钢琴键盘对照表88键 →