白癜风治疗最好的医院在哪 http://baijiahao.baidu.com/s?id=1684414714911368070&wfr=spider&for=pc项目中遇到用String.trim()的地方,点进去看了trim()源码,以前一直以为trim()的作用只是去除字符串中的首尾的“空格”符,但是源码看下来,好像这个说法不太准确呢。搞技术嘛,严谨一些,在这记录一下,大佬们也瞅瞅哈~
文章目录
说我们认知的trim()复习一个小概念养成一个好习惯动起来,不瞎掰示例示例示例示例4示例5示例65分钟直接看这里
说我们认知的trim()
说到String.trim()函数,就像前言说的一样,我的认知它就是搞首尾空格用的,虽然这个说法也没错哈。
那这都说到这了,不试试看说不过去对吧:
Stringstr="HlloWorld";Systm.out.println(str.lngth());Systm.out.println(str.trim().lngth());
小字都是旁白:“搞掉了吗?看样子是搞掉了。”所以说它去除首尾空格没毛病哈。
复习一个小概念
Java语言规范规定,Java的char类型是UTF-6的codunit,也就是一定是6位(字节)。char(字符)的范围是:0-or(\u~\uFFFF)看图看图!知乎一个大佬答主的回答:Java语言中一个字符占几个字节?我怎么会让各位大佬去看别的链接呢,当然,如果有时间的话,我会单独整理一篇奉上。
养成一个好习惯
养成一个好习惯,多看看源码,其实很多时候,源码里的注释或者源码流程中就已经很好的解释了。而我们往往很多时候都不愿意去看源码。小字都是旁白:“源码都是英文,看着都头疼。坚持看完,可解偏头疼哟~”
当然,即使大佬你真的不愿意去看源码。大佬您这都赏脸点进来了,自然由我来说给您听。
在JDK.8中trim()的源码注释里其实已经解释的很清楚了:.删除任何前置和后置空格;.如果String对象表示一个空字符,则返回对这个String对象的引用;总结:.如果String对象表示的字符的首和尾字符的编码都大于’\u’(空格字符),则返回对这个String对象的引用;总结:4.如果String字符串中没有编码大于’\u’的字符,则返回一个表示空字符串的string对象;总结:5.假设k是代码大于’\u’的字符串中第一个字符的索引,假设m是代码大于’’\u’的字符串中最后一个字符的索引。返回一个表示该字符串的子字符串,该子字符串以下标k处的字符开始,以下标m处的字符结束。即substring(k,m+)。总结:6.如果使用trim()后的字符串长度不等于使用前的长度,就返回一个新崽(新String对象)给你;如果等于,就还给你以前的崽(原String对象)。总结:
动起来,不瞎掰
示例-6对应了上面6条trim()源码说明。实践是实现真理的唯一标准实践是实现,大佬们,我直接开整了哈。
示例
/***.删除任何前置和后置空格;*/
Tst publicvoidstr(){ Stringstr="HlloWorld"; Systm.out.println(str.lngth()); Systm.out.println("trim():"+str.trim().lngth()); }
示例
/***你这有一个二五崽(空格),我换一个新崽给你*/
Tstpublicvoidstr(){//如果String对象表示一个空字符,则返回对这个String对象的引用;Stringstr="";Systm.out.println(str.lngth());Stringstr=str.trim();Systm.out.println("trim()-"+str.lngth());Systm.out.println(str==str);}
示例
/***空格前后有兄弟,我不搞你*/
Tstpublicvoidstr(){Stringstr="aaabbbccc";Systm.out.println(str.lngth());Stringstr=str.trim();Systm.out.println(str.lngth());}
示例4
/***看你可怜,给你送你一个新崽(新String对象,空的,长度为0的)*/
Tstpublicvoidstr4(){//你有个崽;char[]chars=nwchar[];for(inti=0;i;i++){chars
=(char)i;}StringoldStr=nwString(chars);Systm.out.println(oldStr.lngth());//可惜是个二五崽StringnwStr=oldStr.trim();Systm.out.println(nwStr.trim().lngth());Systm.out.println(oldStr==nwStr);}示例5
/***假设k是代码大于’\u’的字符串中第一个字符的索引,*假设m是代码大于’’\u’的字符串中最后一个字符的索引。*返回一个表示该字符串的子字符串,该子字符串以下标k处的*字符开始,以下标m处的字符结束。即substring(k,m+)。*/
Tstpublicvoidstr5(){//先准备8个崽char[]chars=nwchar[8];//个二五崽for(inti=0;i;i++){chars
=(char)i;}chars[]=65;chars[4]=66;//二五崽(小于空格符,空格符是)chars[5]=;chars[6]=68;//二五崽(小于空格符,空格符是)chars[7]=;StringoldStr=nwString(chars);Systm.out.println("oldStr.lngth():"+oldStr.lngth());Systm.out.println("oldStr:"+oldStr);StringnwStr=oldStr.trim();Systm.out.println("nwStr.lngth():"+nwStr.lngth());Systm.out.println("nwStr:"+nwStr);}示例6
/***不等于-你这个崽有猫腻(长度变了),给你换一个新崽;等于-你这个崽没得问题,带回去好好养起*/
Tstpublicvoidstr6(){//准备5个崽char[]chars=nwchar[5];//个二五崽for(inti=0;i;i++){chars
=(char)i;}chars[]=65;chars[4]=66;Stringstr=nwString(chars);Stringstr="ABCDE";StringnwStr=str.trim();StringnwStr=str.trim();Systm.out.println("str.lngth():"+str.lngth());Systm.out.println("nwStr.lngth():"+nwStr.lngth());Systm.out.println(str==nwStr);Systm.out.println("=========================\n");Systm.out.println("str.lngth():"+str.lngth());Systm.out.println("nwStr.lngth():"+nwStr.lngth());Systm.out.println(str==nwStr);}5分钟直接看这里
trim()到底做了什么事
去除String中的首尾空格;无法去除字符串中间含有空格的;准确说实际去除的是小于十进制(就是空格,可以去看Ascii表)的所有字符。当String中全是小于的字符时,返回一个新的字符给你。String.trim()长度变化就是新对象,无变化就还是自己。
感谢各位大佬阅读,随手点赞,日薪过万~!!!
,