trim()方法去掉了哪些字符

C++学习(四六六)Multiple parse contexts are available for this file Note: Multiple parse contexts are available for this file. Choose the preferred one from the editor menu 参考: "Multiple parse contexts" in Qt creator | Qt ForumHi Do you use sessions? https://bugreports.qt.io/browse/QTCREATORBUG-18521 Anyway, its not. 阅读详情
版权声明:本文为博主转载文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接: https://blog.youkuaiyun.com/leeqihe/article/details/81006611
  • trim()方法去掉了哪些字符?
  • trim()/substring()怎样返回字符串对象?

trim()方法去掉了哪些字符?

在Stack Overflow上看到一个问题(点此查看):
I am receiving a string from server trailing one or two lines of spaces like below given string.

String str = "abc*******         
          ********";
 

Consider * as spaces after my string

i have tried a few methods like

str = str.trim();

str = str.replace(String.valueOf((char) 160), " ").trim();

str = str.replaceAll("\u00A0", "");
 

but none is working. Why i am not able to remove the space?

为此看了一下trim()方法的源码,发现挺有意思的。
先看下面的代码:

    public static void main(String[] args) {
         String str = "abc";
         System.out.println(str.length());
         str = str.trim();
         System.out.println(str.length());
    }
 

我不清楚各位在刚学习Java的时候老师(或者书上)是怎么说的,我入门是看毕向东老师的视频,当时毕向东老师说的是trim()方法会去掉字符串两端的空格;后来看《Java核心技术》的时候,书上说的时“返回一个新的字符串。这个字符串将删除了原始字符串头部和尾部的空格。”(第9版的中文版,在卷一51页20行。)所以我一直理所当然地认为trim()方法会trim掉字符串两端的“空格”,也正是如此,我看到源码的时候才会觉得很有意思。

不说别的,上面代码输出的是9、3,也就是字符串尾部的””被trim()掉了。
更有意思的是,如果你把上面的代码copy到Notepad++上,它长成这样:
这里写图片描述

而在Eclipse上,它长这样:
这里写图片描述

没错,这个特殊的符号在Eclipse上是看不到、不占任何“空间”的,如果我们不小心在代码中混入这样的字符,估计排错会很痛苦……

再接入正题,现在我们知道了trim()方法不只trim掉空格那么简单,那么它究竟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)的所有字符。

System.out.println("' '的Unicode编码为:" + (int)' '); // ' '的Unicode编码为:32
 

trim()/substring()怎样返回字符串对象?

再看另外一个问题:

    public static void main(String[] args) {
         String str1 = "abc   ";
         String str2 = "abc";
         String str3 = "abc";
         str1 = str1.trim();
         System.out.println(str1 == str2);  // false
         System.out.println(str3 == str2);  // true
    }
 

str1.trim()返回的字符串为”abc”,而在常量池中已经确定存在这个”abc”这个String对象,那为何str1==str2不成立呢?
我们看trim()方法的最后一行:

return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
 

也就是说,trim()方法实际上的行为并不是”去掉两端的空白字符“,而是”截取中间的非空白字符“。
再看substring()方法:

    public String substring(int beginIndex, int endIndex) {
        if (beginIndex < 0) {
            throw new StringIndexOutOfBoundsException(beginIndex);
        }
        if (endIndex > value.length) {
            throw new StringIndexOutOfBoundsException(endIndex);
        }
        int subLen = endIndex - beginIndex;
        if (subLen < 0) {
            throw new StringIndexOutOfBoundsException(subLen);
        }
        return ((beginIndex == 0) && (endIndex == value.length)) ? this
                : new String(value, beginIndex, subLen);
    }
 

我们看到,当实际发生了”截取“这个动作的时候,因为此处无法直接声明一个String常量,即substring()无法像我们写String str = “abc”这样直接在常量池中创建对象,所以它返回的是一个new出来的对象,这个对象位于Heap内存中。

载波同步技术(一):BPSK的Costas Loop 载波同步 Author:McCrocodile 2010/11/04          载波的提取在相干解调中往往比较重要,根据信号中是否包含载频分量,载波同步一般也可以分为两种方法。包含载频分量的可以采用窄带滤波或者基本的锁相环环路来实现,不包含的则比较麻烦需要采用特殊的环路实现载波的同步。这里介绍的BPSK的载波恢复就属于后面一种。 对于不包含载频分量的信号载波同步一般有:同相-正交环(就是常说的Costas环)、判决反馈环(几乎可以适用所有调制方式)、同相-正交环衍生环(QPSK松尾环、N相同相-正交环)。 阅读详情

相关推荐

YOLOv11 网络结构详解:一文看懂 Backbone、Head、C3k2、SPPF 和 Detect 检测头

在使用 YOLOv11 进行目标检测时,我们经常会接触到或这样的模型配置文件。backbone和head分别是什么意思?ConvC3k2SPPFC2PSA这些模块分别起什么作用?P3/8、P4/16、P5/32 代表什么?为什么最后 Detect 要同时接收 3 个不同尺度的特征图?YOLOv11n、YOLOv11s、YOLOv11m、YOLOv11l、YOLOv11x 的区别在哪里?

learnerYC的博客 1812

String类的 trim() 方法的基本使用 & 源码解析

String类的 trim() 方法的基本使用 & 源码解析

Shipley_Leo的博客 1万+

J204B接口数据链路的建立

介绍J204B数据链路层的建立方式

QUACK_G的博客 6548

String.trim()方法说明

API说明 trim public String trim()返回字符串的副本,忽略前导空白和尾部空白。 如果此 String 对象表示一个空字符序列,或者此 String 对象表示的字符序列的第一个和最后一个字符的代码都大于 '\u0020'(空格字符),则返回对此 String 对象的引用。 否则,若字符串中没有代码大于 '\u0020' 的字符,则创建并返回一个表示空字符串的...

爱的叹息的专栏 8611

保姆级教程:在华为云Ubuntu服务器上快速搭建RAGflow开发环境(避坑指南)

本文提供了一份在华为云Ubuntu服务器上快速搭建RAGflow开发环境的保姆级教程。针对网络拉取镜像等常见问题,详细介绍了从服务器选型、系统优化、Docker配置到RAGflow部署与验证的全流程,并给出生产环境调优建议,帮助开发者高效避坑,快速构建企业级应用环境。

weixin_29250403的博客 86

《全连接到卷积神经网络:图像识别的演变历程》

这篇文章会从传统全连接层面临的困境说起,揭示卷积神经网络(CNN)成为图像识别核心动力的原因,探究其背后蕴含的设计思想与技术创新。但是回顾历史,CNN的出现提醒我们:技术的突破往往是由对自然规律的模仿和重新构建得来的。也许,当机器真的学会“像人一样看世界”的时候,它们的“眼睛”早就超过生物视觉的限制了。例如,用5×5的核处理224×224的输入时,只要25个参数(而不是全连接那种百万级的)。* 局部性:网络的底层只需留意局部的地方(像边缘、纹理这样的地方),不用管那些全局像素之间复杂的关系。

2401_82434295的博客 674

探索String类的trim方法:去除字符串两端的“隐形守护者”

在Java的String类中,trim()方法是一个常用的方法,它的作用是去除字符串两端的空白字符。这里的空白字符包括但不限于空格、制表符、换行符等。trim()方法返回的是一个新的字符串,原字符串的内容并不会被改变。

m0_51176516的博客 1446

信息奥赛课课通(C++)p154-1近似排序

试题描述 读入一对正整数,将这两个数之间(包括这两个数本身)的所有数按下述特别规则排序后输出,该特别规则是按两数倒过来的值进行比较决定其大小,如30倒过来为3,29倒过来为92,则29大于30. 输入要求 1行,包含两个用空格隔开的自然数,这两个自然数给出了待排序数的范围,其中1≤第一个数≤第二个数≤999999999,两个数之差不超过100. 输出要求 输出排序后的数据,每行输出...

mengdicfm的博客 7283

Java String trim()方法的详解

Java String trim()方法的详解

weixin_45428910的博客 3925

二、租用AutoDL服务器与连接教程

点击右上角控制台,选择【租用新的实例】;,我这里使用的是xshell和xftp工具(自行下载)。打开本地目录和服务器目录,直接拖动文件。

zzf021122的博客 1327

《Android最全面试题-Offer直通车》目录

如今Android求职是僧多粥少,竞争非常激烈,企业招聘时要求很高,本专栏汇聚android面试各种考点,各大公司Android面试题,《Android 最全面试题》将助你全方位提升,助您脱颖而出,早日拿到满意Offer。本专栏汇聚了海量优质内容,文章数量超过100 篇。凭借过硬的质量,每月新增订阅用户数以百计,如今仅需特惠价 9.9 元,限时抢购,后续将逐步恢复原价,早订阅早开启逆袭之旅。精心筹备,整理出一系列超万字精华篇章,累计数十万的 Android 面试题深度剖析。

大模型大数据攻城狮的专栏 2867

.trim() 方法 的含义及使用场景

.trim() 方法 的含义及使用场景

YHLSunshine的博客 7163

项目篇 | 图书管理系统 | 管理员模块 | 概述

图书管理系统管理员模块概述

百栗.的博客 405

字符串去掉空格 trim()方法

jquery库提供了$.trim()方法,能直接用, 但没用库时FF里有效果,IE里就没实现, 解决办法:用正则替换 方法: function trimStr(str){return str.replace(/(^\s*)|(\s*$)/g,"");} var 变量=trimStr(需要去空格的字符串)  ...

weixin_34149796的博客 805

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

JS的trim()方法,去掉字符串空格

去除字符串左右两端的空格,可以试用默认的str.trim()方法,也可以写正则表达式去掉字符串左右空格。 js默认提供去掉左右空格的方法str.trim() 或jquery的$.trim(str) 写成类的方法格式如下:(str.trim();str.lt

放飞梦想的专栏 3187

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

String的trim()方法如何去掉字符串中前/后面的空格

07年9月12日          今天开发遇到一个问题,就是把内容后面的字符串截掉的问题,查了csdn上的帖子,有个很巧妙的方法,我得整理出来记好,免得以后忘了.         String的trim()方法是去掉字符串前后的空格,如:         String  str = "     a   bcdef     ";          str = str.trim();

derpvailzhangfan的专栏 2万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

string.trim() 到底去掉了什么?详解 JavaScript 的字符串修剪方法

本文详细解析了JavaScript中trim()方法的字符处理机制。该方法会移除字符串首尾的多种Unicode空白字符,包括空格、制表符、换行符等17种特定字符,但保留中间的空白和零宽字符。文章对比了相关方法(如trimStart()),给出了表单处理、粘贴内容等实际应用示例,并指出特殊案例(如不可见字符处理)。同时解释了其底层实现原理,说明为何包含BOM字符,并提示在不该使用trim的场景。最后强调理解这些细节对避免边界问题的重要性。

qq_44136882的博客 1305

C#,asp.net去除字符串前后空格,Trim()

用Trim()方法就可以了: String s = " 去掉空格 "; s = s.Trim();

weixin_34204722的博客 738

jQuery trim() 方法去掉字符串的前后空格

function dosearch(value) { if($.trim(value)!='') { var value = encodeURI(value);//进行编码,不然后台接受的是乱码 $('#table').datagrid({ url

云华100的专栏 5997

Java trim() 方法 :去掉字符串头尾空白符(空格)

trim() 方法:去掉字符串两端du的多余的空格 注意,是两端的空格,且无论两端的空格有多少个都会去掉,当然中间的那些空格不会被去掉 返回值 删除头尾空白符的字符串 实例: //材料名称 if (StringUtils.isNoneEmpty(bean.getName())) { entity.setName(bean.getName().trim()); } ...

gr_guhun的博客 1256

java去掉字符串中前后空格函数_Java trim()方法:去除字符串的前后空格

Java String类中的 trim() 方法返回去除字符串前后空格的副本。如果没有前导和尾部空白,则返回此字符串。语法:trim()注意:如果此 String 对象表示一个空字符序列,或者此 String 对象表示的字符序列的第一个和最后一个字符的代码都大于 'u0020'(空格字符),则返回对此 String 对象的引用。否则,若字符串中没有代码大于 'u0020' 的字符,则创建并返回一...

weixin_33783273的博客 9339

java面试题:模拟String的trim()方法,去掉字符串两端空格

public class SimulateTrim { public static String removeSpace(String str) { String newStr = ""; int start = 0; int end = 0; //获取首个非空格索引 for (int i = 0; i < str.length(); i++) { if (str.charAt(i) != '

谁最温柔最有派 829

js 中去掉字符串两边的空的方法(即java中的trim()方法)

str = str.replace(/(^\s*)|(\s*$)/g,''); str = str.replace(/(^\s*)|(\s*$)/g,''); 转载于:https://www.cnblogs.com/mr-level/p/4777847.html

asdf19890920的博客 98

trim()

trim()方法的作用是去掉字符串两端的多余的空格。

c1776167012的博客 4624

String中trim()方法的运用

rim()的作用是去掉字符串两端的多余的空格,注意,是两端的空格,且无论两端的空格有多少个都会去掉,当然 中间的那些空格不会被去掉,如: String s = " a s f g "; String s1 = s.trim(); 那么s1就是就是asfg ,把头尾的空格给删除掉了 trim()不仅可以去掉空格,还能去掉其他一些多余的符号,这些符号分别是: \t \n \v \f ...

weixin_43889681的博客 2830

java 利用String.trim()函数实现右侧去除空格

trim函数有两点要特别注意,1、它可以去除字符串两端的空格,注意是两端!也就是“     ABCD    ”处理完就是“ABCD"了。2、它不仅仅是除去” “,还可以除去‘\t’,'\n'等字符,函数说明如下 Returns a copy of the string, with leading and trailing whitespace omitted. If this St

monkeyduck的专栏 1万+
上一篇: Error:(xx, x) java: 类xxx是公共的, 应在名为 xxx.java 的文件中声明
下一篇: JAVA多线程的学习和深入
20℃风
博客等级 码龄8年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值