00:00
那再往后讲的话呢,咱们就涉及到这个string,这个内存这块呢,咱们就彻底说完了,开始说到string的一些常用方法,嗯,这个常用方法呢,我这写的比较多,呃,这些方法呢,确实比较常用,大家呢,呃,咱们接下来会测试一下啊,测试的过程当中,一方面你先明确这个方法是做什么用的,另外一方面呢,呃,稍微的记一记啊,就是当你记记住这些方法以后,后边呢,你做一些常规的操作的时候呢,你会不自觉的就会想到它啊,你别到那个时候说用到字符串操作了,你说哎呀这个怎么做呀,你再去找一篇,这个跟你一开始记住这个方法呢,现用它是不一样的。哎,你要是记住这些方法了,你直接呢,就会有这个思路去解决这个问题了,你要没记住,你都不知道API里边到底都有什么方法了啊,所以大家呢,诶,通过我下边这个测试呢,大家一边测试一边说大家一边去记,首先第一波CTRLC这个咱们在这个里边啊,新建一个关于这个string当中的这个方法。
01:06
Ctrl shift f一下调到这吧。这里边儿的方法呢,很多咱们其实都用过。我以这个hello world为例。嗯,第一个LS对这个就很熟了,S一点Ls.L。那第二啊,还是out一下,就是输出它的长度是吧,那这个长度本质上来讲的话呢,是它底层的,哎,数组的长度带数组的长度啊。那hello word咱们这个,哎是十个字符,所以呢长度就是十,好下一个呢叫char艾char呢就是取指定索引位置上的一个字符,诶这个S一点,我们来个叉,这个方法呢,非常的常用啊,咱们说这个数组,咱们讲数组的话呢,你直接通过这个角标去掉,那你到这个字符串这块呢,它把这个数组相当于给封装起来了,封装到这个string类当中了,哎,咱们不可以直接去操作人家这个数组,因为咱们看到源码写的是一个private。
02:30
他也没有提供这个数组的概塞的方法,所以我们根本不可以直接去操作这个数组,那你只能是通过这个方法啊,去调这个数组的指定元素啊,这个呢,就是差it,那这个差it这个有个索引,它的范围仍然呢,你需要满足这个数组的范围,哎,那就零到九,对啊,我这写个零,然后呢,再来一个啊写个九啊,再来一个写个十。哎,这个呢,你肯定知道这个具体的情况了。
03:00
哎,写一个0H写个九啊,Hello word最后的D写最后这个呢,是超出范围了啊,因为你现在操作的不是我们的数组了,是string了,所以我们是string index auTo Bo,本质上一样啊,都是操作的数组了,所以这个呢就错了,好理解下边empty。说当前这个数组呢,是不是空的,哎,判断标准就是我们Y6的length。这个我们s out s一点啊,这个来一个叫is empty,嗯,那这呢,显然它不是一个空的啊,这是一个false的,那如果说我们这个S1怎么着呢,我这样写一下。哎,这呢就属于一个初了,哎这样啊,哎暂时呢,咱们把它注释一下,这S点一下看,就是判断我们这个数组的长度,哎,它是一个零啊好,这个呢也比较简单过了。
04:07
嗯,Empty,然后接下来to lower case to upper case,诶把它们呢,转化成相应的大写的,呃,这个lower就小写的,Offer呢,就是大写的,嗯,就是这个呢,你可以转换以后,比如说做一些匹配啊等等的操作,咱们就需要用到的,嗯,这个你看我S一点,我叫to upper case啊天,Two lower case,这个大家关注一下啊,我们现在这个返回值呢,我接收为叫S2,你看我们这个S1呢,本身变没变?一你觉得变了吗?啊,这个这个不好了,我这个W比如整成一个大写的H呢,也整成一个大写的吧。好。嗯,先写的是S1 S1的话呢,是不是没有变,嗯,S2呢,变了,其实这块呢,也算是我们关于这个string的一个不可变性的一个小的体现哈,就是它呢,没有对这个S1本身去修改啊,还指向你原来这个,呃,你这个S2的话呢,是我变了以后给你新造了一个,你这个拿S2的去复制啊,去重装。
05:21
啊去指向就这个意思。啊,这个大家小心一点啊,就是很多同学可能会误认为说S1呢,去lower去lower case完了以后呢,你就又拿着S1去操作了,以为说一的已经是小写了,其实不对。啊,这个我们明确说一下啊,这个S1哎,它是不可变的。啊,这个仍然为原来的这个字符串啊,这个呢是修改以后的啊,就是改成小写。哎,以后的这个,哎,字符串有个这个区别,好,接着to upca这个我就不测了啊,那就是全部转化成大写,本身呢,这个组串呢仍然不变,下边一个叫trim trim呢就是叫忽略前导空白和尾部空白,我这呢再去定义一个string叫S3。
06:16
嗯,不妨呢,我还叫这个hello word这里边呢,我会有一些这个所谓的空格。哎,这来一个分号,此时的话呢,我们调一下叫S3点,我tri一下,Tri以后呢,你看它还会有一个返回值,我这接收为一个叫S4。现在呢,我们看一下S3和S4 S3为了方便起见,我在这个前面呢,我加上一些这个短航线,方便呢,我们去看一个结果。来,再来一个S4。好了,那这时候我们看一下这个结果是什么。
07:03
哎,看这啊,这个呢,是咱们的S3,跟原来定义的这个S3呢,还是一样的。而这个S变了,对,就是去除咱们这个原来字符串当中首和尾出现的一个或多个空格,中间的空格呢,不要变,该有还有。啊,这就是去除首尾空格的一个操作啊,叫tri这个有什么用啊。对,输用户名的时候,比如大家呢,你在这个页面去,呃,注册用户的时候,或者大家呢,你用QQ,那你可以中午试一下,你搜索的时候,那你写一个这个字符串,有的时候我们不小心呢,会在这个前面呢加上一些空格,在后后边呢加一些空格,因为空格本身就你又看不出来,所以呢很难被发现,那就有可能用户在注册的时候呢,误操作加了俩空格啊注册好以后呢,回来继续登录,说这个用户名不存在,但是我明明注册了怎么不存在呢,他还以为你后台有问题呢,是吧?啊那你为了更好的让用户呢这个去存储,这个时候呢,咱们前后的空格呢,都给它默认去掉,那中间要有空格呢,用户是可以发现的,我们中间的这些空格呢,就不去了。
08:15
这个呢叫trim,那equals不用多说了吧。诶比较的是实体的内容啊,那equals ignore case呢,对,就是在忽略大消息的情况下呢,我们看它是不是一样的,这个咱们在这呢,再稍微再换一波。哎,这呢一个STRING1,哎我呢不妨就还叫这个hello word。再定一个这个S2这个我们全部给它转换成是一个小写的。哎,这个时候呢,我们先去比较一下啊。哎,比较一下这个一点,咱们顺便呢测一下这个啊equals,然后呢,我们调一个叫ignore case。
09:11
哎,这么着,这个字符串呢,它其实是严格区分大小写的啊,你这个大写的A跟大写小写的A它肯定不一样,所以ecos呢,只是false,哎这个呢,忽略的时候呢,就是出来,呃,有些时候呢,大家呢,呃,就是可能会需要用到这个忽略大小写的情况啊呃,再往下这个叫con cat,就是连接的意思,嗯,这个呢,其实比较简单,咱们有时候呢,也不爱用它,因为咱们还可以呢,直接不是写那个加号嘛,对,我S3呢,我去调这个坑,哎,我写一个DEF。哎,然后这时候呢,这不就返回一个新的字符串了,这个新的字符串呢,就相当于是做了一个拼接。那这个S4它的结果呢,就是ABC,哎,DEF。
10:06
那就这样啊,哎,很多时候呢,我们就直接呢写这个连接了啊,所以这个呢,大家可以不用,当然这个连接的这种操作呢,是常见的啊,只是我们用它来替换了,下面呢叫compare to,这个方法其实挺重要的,嗯,这个compare to呢,实际上是我们因为string呢,咱们一会儿讲它实现了一个接口。叫comparable接口,它就可以比较大小了,这个接口里边有一个抽象方法,这个抽象方法呢,重写以后其实就是它。哎,这个compare处呢,表示我们可以拿调这个方法的字符串和我们形象这个字符串呢,去compare,就是说可以比较大小啊,这就涉及到这个大小之说了,行,再简单的测一下S5,这呢我叫ABC。S6,注意,这时候呢,跟你用什么方式造有关系吗?没关系,咱们此时关注的不是说内存在哪,也不看它的地址,我主要关注的是内容。
11:08
嗯,内存的那个事儿,咱们那会儿已经讲过了啊,这块呢,就看内容我叫abd。好。打印一下这个s5.comparetwo,我写个S6啊,它的比较方式呢,你打开你看一下,实际上就是从头往后一个的去比。啊,一个一个去比,只要呢它俩不一样,我们就做个减法,那么自然而然的话呢,我们是拿这个前边,因为你是拿这个ABC掉的哈,是不是拿ABC去减这个abd啊,是先拿A跟这个A去比啊相同的B跟B一样,C跟D这个我换成一个E吧,啊C跟这个E呢去比一下。哎,那么一执行这个是个负二。你这个数。啊,跟这个数比,这个小A是多少来着。97吧,那九十七九十八这个是不是99C,哎,然后Dee呢,101呗,这样一减是不是就负二啊,哎,就这样啊,哎,我刚才要写D的话呢,呃,不容易,你看出来是负一,是是所有都是负一啊,还是说怎么样,哎,我这写个E你就看出来了,就是它俩直接相减的啊,那么你要是负数呢,就意味着我这个数小。
12:23
哎,我减它是负的,是不是我小啊,你小的减大了不才是负的吗?哎,所以说这个里边我们就关注于它这个结果了啊,结果呢就是说如果你要是负数啊,就当前对象小啊,这个正数啊,这个哎这它就大零啊,你俩呢就相等啊,你俩就相等啊,哎,这个方法呢,我们就会涉及到字符串排序。大家呢,在手机的联系人这块啊,你会发现呢,你这是abcd排的,就是因为呢,它里边掉这些方法。啊,你后边这个呢,比前边这个呢,后边这个比前面这个我你先拿前边这个呢去compare,你要填的这个发现的这个是一个呃负数啊,那我就得在你的后面啊,然后一直这样掉掉掉掉,哎掉到前一个呢还是负数,再后一个呢,诶这个发现呢,你后边这个呢去减,我们现在要放的这个呢,是个正数了,说明你大,那我就把这个心要放在这个人呢,就放在这俩中间。
13:22
啊,就是不断的调这个compare to,好,嗯,Subst stringam sub string sub就是子。String字符串子字符串就是取现有字符串的一个子串,注意的就是我们这个S它是小写的啊,按说呢,这是一个单词,这是一个单词,S该大写,但是没有啊小写的。String这个S7,哎等于这个呢,我们写一个,嗯,叫比如说啊北京上硅谷啊教育是吧,哎在这里边我去取它的一个子串S7点叫sub string,我这呢先写一个。
14:04
比如我想取出来叫上硅谷教育啊,你说这块我怎么写,它有一个光有一个参数的,这是索引零索引一是不是这个要啊,哎,所以我这写个叫二,然后呢,Al enter一下S8,好打印一下S7.s奥S8。哎,看看跟你想的一样不一样,看结果。七变了吗?没有变,所以说咱们自始至终只要你调字符串这个方法呢,只要是它有返回的,你还对这个字符串想修改,那你调的时候呢,这个都不变,返回的那个是变以后的,哎,这叫不可变形,哎,这是这样子的,然后这个呢,诶是商务教育啊,那么除了这个方法之外呢,还有一个呢,就是可以指定一个叫end的index。哎,咱们还拿这个S7,因为你本身也没变嘛,哎萨博string一下,我现在呢想把这个上V5取出来,这个呢肯定是从二开始了,那么2344是需要的啊,你说我这写四还是写几呢?哎得写五,写四呢不行S9。
15:24
S过期就懒得测了啊,他没有变哎,得写五。哎,这叫上规谷,哎就是相当于我们通过这个结论反推,你能知道这两个参数的意思,这个二是包含的是吧,2345,你发现这个叫没出来,说明这个五是不包含的,所以咱们这时候呢,它返回的是一个,哎截取到从这儿到这儿这个呢是不包含的一个子字符串,也可以把这个事儿呢,我们称作叫左臂右开。
16:00
大家呢,上高中学这个区间啊,从A到B,它就代表着这个变量是大于等于A小于B的是吧,左臂右开啊,不包含这个位置啊。成,那么以后呢,咱们还会见到类似的一些结构中有这个从哪开始到哪结束,这个呢,通常都是左壁右开的,从哪都是左闭右开的,但有的时候呢,你小心一点,还有一类方法呢,它是说从哪开始取几个啊,从二开始我取五个,那就是23456,是不是取了五个嘛,是吧,有的是从二开始到五结束,那就是234到哪结束的都不包含这个都是左边右开的,那么你怎么知道它后边这个是取几个还是到哪结束呢?见明之义嘛,他这写的length,那就是几个写什么end index啊是吧,这个就是属于到哪结束啊,这是一个小技巧,好,这是咱们说的这一波方法。
我来说两句