00:00
好,那刚才呢,我们把这个文本框的基本的使用呢,给大家讲解了一下啊,那讲解完以后呢,我们下边呢,还有三个,呃,在具体使用过程当中的这个注意点,第一个呢是编译器,在编译的时候呢,会删除掉啊这些多余的空格啊,第二个呢,是关于这个转移字符,诶我们在上面呢也提到过这个转移字符的事儿啊,我们再来说一下这个问题,然后第三个问题呢,是关于文本块的一个连接问题,诶把这三个问题说完以后,加上咱们刚开始讲的这个基本使用,那关于文本块呢,这些各个细节呢,大家其实就都掌握了啊,后续呢,如果大家在开发中去使用文本块啊,文本块啊就不会出现任何问题了,好,那我们先来看第一个啊,嗯,举了一个例子,咱们呢,在一开始讲这个文本块的时候呢,就拿这个ATM代码呢,给大家做过这个举例,这也是一个最简单的一个ATM代码了,那这个代码当中,我前面呢,用一个点表示一个空格,大家会看到我们这里呢,其实是包含一些空格的,对吧?诶这个在相应的标签的开始。
01:00
哎,这个当然这是一个结束标签了啊,就是前面呢会有一些空格,当然呢,我们在对应的一些标签的后面呢,可能也会有空格,我这儿呢用四个点来表示四个空格了,那这儿呢,我们就呃会出现一个问题,什么问题呢?咱们看到的内容当中,我这用点表示啊,实际当中我们空格都没有点了,这个我们看到的这个内容当中是这样子的,那跟另外一个这个文本块啊,带空格的一个跟不带空格的我们看到这内容呢是一样的,但实际上呢,它俩有没有区别呢?啊这里边提到了说如果编译器对咱们这里边加的这些点不做处理的话呢,可能会导致程序员看到两个文本块的内容呢,是完全一样的,就是有数据的这个啊是完全一样的,但是呢,就有可能因为其中的呃一个呢,里边加了一些空格的,但是我们又看不到,呃,导致呢,这两个文本块呢是不一样的,既然两个文本块不一样,它就相当于是两个不同的字符串了,呃,那么它们的哈一直就不一样,继而的话呢,它们在常量池当中就不会去使用同一个。
02:00
呃,常量池中的这个磁轮字符串数据了啊,就可能对我们实际操作中呢,会产生一些影响哈,那这时候我们说怎么办呢?说编译器在编译的时候呢,它会自动的删除掉这些所谓的多余的空格啊,看着好像挺简单的是吧?呃,直接呢记住这个结论就行,那么实际在演示当中或者我们使用当中还是有一些小细节需要大家关注的啊,那我们粘过来说明一下这个问题,好这呢是咱们这个第六个测试啊,说一下这里边儿这个细节。哎,这呢,我们string啊,我再定一个这个T测一,哎开始结束,哎这样子,然后在这呢,我写一个ABC,首先我来打印一下这个T1的长度,哎,那么问一下大家这个长度是几呢。是三吗?哎,应该是四对吧。
03:00
嗯,应该是四,呃,因为呢,咱们这除了ABC之外,咱们还有一个换行符,哎,所以这个是四,好大家注意哈,你看我现在做这个事儿,我在这个ABC的后面一个两个三个,哎,我写了三个空格,三个空格,那三个空格完了以后,我们说这个长度会变成七吗?诶大家看还是四是吧,呃,那也就是说呢,他把我们ABC后边这个空格,你看我现在这块去演示的话,后边这个都没有了啊呃,他把我们后边这个空格呢,自动的就做了一个删除啊,就给我们滤掉了后边空格的,因为咱们在写的时候呢,有时候很难察觉到后边是有空格的啊啊,他就做了一个删除,那这做了个删除,那前面呢,前面会删吗?啊举个例子啊,比如ABC我加了一个空格,这个会删掉吗?跑一下看看它的长度就知道了,看看是四还是五,诶是五是吧?诶那刚才咱们不是说了,它会编译的时候呢,删除掉这些多余的空格,那前面这个空格呢,就不会帮我们删吗?其实前面的空格这个删呀,它有一个呃,比较细的一个点啊,大家看呃,我再加一个空格的话呢,这就又会多一个长度。
04:14
啊,这就变成六了,然后呢,诶,我们下边这有三个结束标签,这三个结束标签之前呢,大家注意我加一个空格。我加了个空格啊,那你说这时候的这个长度是几呢?按照我们的理解呢,可能会是这样啊,首先呢,一个两个,然后345有一个换行,那就是六啊,就是我们刚才看到的这个结果叫六,然后呢,再加上这个叫七了,是这样吗?是七吗?好,大家看,非但没有加一,反而呢,在六的基础上呢,减了一个一啊,那我要是再加一个空格呢。哎,大家看这时候呢,就变成四了,诶也就是说,哎,我们做个总结啊,就是后边这个空格呢,都会无条件的帮我们去掉,但是开头的这个空格要不要去呢?就看你这个结束之前,大家你看我这时候结束之前呢,只有两个,所以它就会把我们上面这两个呢给去掉,那我上边这块呢,如果是诶再加两个,那你这块呢,还是这两个,哎,就相当于我们上边啊就多了两个字符了,哎,这有两个,这有三个五个,再加上一个换行符六个,哎,这时候结果应该是六了,对吧。
05:22
嗯,就成六了,那如果让你下边这个三个呢,再哎空格空格,哎,把上面这两个空格呢,现在又给吃掉了。哎,此时呢,又会变成四,哎就是这样的情况啊,就是说我们结尾的这个呢,会无条件的去掉,那么开头的要不要去呢?开头要不要去,就看我们这个结束标签之前有没有这个空格了,诶你有几个空格,我有对应的每一行给你去掉这几个空格,所以呢,大家你看我们上面写的这个时候,我这还是比较细致的啊这三个,诶这个双引号之前呢,有这么多的这个点点点,所以每一行上我们都会去掉这么多的点点点,就是都相当于给你做了一个删除,诶那你这块呢,没有是吧,那这块呢,就给你做了一个保留。
06:03
你看这块就保留了,然后你后边这块每一行后面啊,如果要有点点点也会自动的帮我们做一个删除行,这就是我们要说的这个编译的时候呢,删除掉多余的空格的这个问题啊好看下一个问题,下一个呢叫做转移字符啊CTRLC说一下它。哎,这个我们是七啊转移字符,呃,什么意思啊,就是我们刚才在上边讲这个的时候说这样的一个写法呢,我们在这个烂衣后边呢,自动会有一个换行符了,相当于是我们原来传统的时候呢,加了一个杠N啊,那如果我们在这个文本块当中,你有必要使用这个杠N表示就要换行了,然后呢,杠T呢表示一个制表符,你需要的话呢,还可以去加这个是没有问题的,直接咱们把这个例子呢拿过来啊,CTRLC。
07:00
你看就是这样一个情况啊,我们把这个ATM2呢做一个输出,大家看我们这个ATM2BODY这两个标签后边,我这加了一个杠N,其实本身的话呢,我们要不写这个杠N的话呢,其实它已经是有一个换行的效果了啊跑一下。你看就是这样子,我们写完A钱包以后呢,它会自动的诶就会换行了,因为你这里边的每一行就相当于我们输出结果里边的每一行了,但是呢,又由于我们后边加了一个杠N,那这时候呢,它就又识别为是一个转移字符,所以呢又会给我们做一个换行,哎,我上面因为删掉换行了,所以它俩呢就相当于是上下行挨着了,这个呢多了一个换行,所以就多出一个空行来,诶就这个意思,就是转移字符呢,在我们这个文本块当中,大家需要使用的话呢,还可以照样用,诶这是没有问题的,哎,这是这个情况啊,另外一个呢,就是说我们在这个文本块当中啊,也可以使用这个双引号,哎,它呢也是合法的啊,这个是可以的,这个呢,我们再来这一个例子啊,这个是八。
08:04
诶,这呢是我们这个一个,呃,外国的一个文学里边的一段话啊,嗯,这一段话当中涉及到一些人说的话了啊,咱们都知道,不管是中文也好,还是英文当中也好,只要是人说的话呢,我们都习惯了用这个双引号给它引起来,那这个双引号的话呢,在以前咱们用这个传统的方式去表示的时候呢,一旦里边你要用上双引号了,一定要加上一个转义是吧?呃,不要把它认为是我们跟这个开始的字符串呢,匹配的一个终止的字符串的表示了,那在咱们现在用这个文本块的方式去表示的时候呢,就不会有这个歧义了,那你该用这个双引号就用这个双引号,那么我们整体文本的内容啊,就是这些,嗯,咱们也可以输出一下看一看啊。嗯,看没有问题,就是里边呢有这个双引号啊,正常的还会帮我们保留,哎,这是这个情况啊,哎,那我们这个自然而然的就会想到另外一个问题,在传统的我们用这个双引号表示一个字符串中间呢,你要是有人说话的话,这样写很容易呢,它会认为这俩匹配,这俩匹配了,所以我们会加上这个,呃,斜线表示一个转移的意思啊,这的是一个人数的话了啊,不代表示一个字符串的结束或者开始了,那现在呢,咱们是用这个叫文本块的方式来表示了,那我要这个文本内容当中出现这个三个呃双引号怎么办呢?这个我是三个双引号的意思哈,那很自然而然的,它会将这个作为开始,这个作为结束了,那我们如果在这个文本块当中就想是用三个双引号怎么办呢?哎,那很自然而然的就是我们也用一个转移就OK了,诶所以这个操作啊,我们CTRLC诶其实也比较简单,哎,大家呢,就是顺这个顺带着啊去做一个推理哎就可以了,我这呢是一个code的,它呢表示的是文本块的一个开始,它表的是文本块的一个结束,哎。
09:52
中间呢,就是我们这个文本块的内容,在这个内容当中,我们又使用了这个三个双引号,那那你要是这样写,这显然就错了嘛,因为他会认为这是开始,这结束了啊,那我们就有必要呢,做一个转移,诶转移完以后呢,这时候就不存在任何的歧义,哎扣的哎第二输出。
10:13
诶,你看就会出现这样情况,这样就是我们模块当中的这个内容啊,诶其实非常简单啊,这个呢,大家从我们原有的那个字符串呃,去转移的这样一个操作呢,去给大家,呃切换过来就行好下一个问题这呢叫文本块的一个连接,诶这个呢,也是涉及到我们在实际开发当中,如果大家去使用这个文本块的时候呢,诶需要面对的一个问题,诶涉及到我们在使用字符串当中涉及到的一些拼接操作啊嗯,我们看一看。文本块的一个连接,说可以在任何可以使用字符串的地方去使用文本块啊,例如文本块呢和字符串的一个互相连接,呃,我们这儿呢,是用传统的方式写的一个字符串,现在的话呢,我们用了一个文本块,表示的是另外一个字符串,中间呢,你可以用这个连接操作啊,就相当于是我们字符串呢,跟我们的文本块呢,是这个可以作为连接了啊,其实呢,大家把这个文本块呢,就当成是一个字符串是没有问题的啊,因为你看咱们字纸中写的话呢,都是把这个文本块呢附给了一个字符串,对吧?诶,所以呢,其实就理解成是字符串做了一个拼接操作就可以了啊,这个就不多说了,呃,下边这个呢就有意思了,我们在这个传统的写法当中啊,就像我们这个传这个数据库的时候啊,写这个circleq,写circleq呢,比如说你想查询什么字段说呃,要求满足什么条件,像这个条件的时候呢,我们经常呢,会比如说呃,要求他的姓名叫什么什么,哎,我们通常呢,会用一个占位符来表示的,就是有的时候我们会传入来一些变量。
11:45
而不是说呢,把这个数据呢,直接写词到我们这个字符串当中了,那涉及到这个变量呢,就涉及到一个拼接问题,呃,以前的时候呢,呃,就类似于咱们现在要讲的这个问题啊,就是前面一个字符串啊,连一个连接符啊,拼一个这个变量,然后后边呢,再使用另外一个字符串,这就是一个字符串的拼接了,那如果说咱们使用上这个文本块以后呢,写法上其实那就得是这样写了。
12:09
这个很自然而然的,对吧?哎,这个我就要扣了,就得这样写,那这个tap呢,就是我们提前定义好的一个变量啊,诶你可能是从这个,诶用户呢,前端这个返回的这个这个发送过来的URL当中获取到的,呃,也可能是我们用户呢,从控制台呢输入的啊等等啊各种各样的情况,包括呢,从配置文件中拿到的,诶都有可能这个tap的话呢,我们这里就给大家指定一个哈,呃,比如说它就是一个盾啊。行,那就这样了,我们下边呢是一个文本块,我们当中用了一下这个变量tap,那就得跟原来我们用一对单引号的情况呢,方式一样的方式来写,这个显然写法呢,会稍微的看着有点笨重啊,那我们先跑一下这个结果。啊,点成个debug了啊行,这个结果的话呢,也出来了,诶我们这时候用这个tap呢,表的是一个变量的数据类型,所以我这写的叫个tap了,没问题啊,这个debug跟这个RA其实都行,咱也没打断点啊,嗯,看着呢稍微有点麻烦啊,怎么办呢?诶我们就可以想一个比较好的方式,这块呢就提到了一些方法啊,这块一共是演示的三个方法,嗯,其实这方法的话呢,也谈不上是多新的方法了啊,就是我们以前string当中涉及到过一些方法,我们用上这些方法呢,会让这个格式呢看着更好看一些,诶相当于做了一个改进啊改进啊首先来看一下这个我们叫CODE1。
13:37
呃,怎么做的呢?这块呢,还是咱们原来的一个字符串,只不过呢,此时我是用的文本块来表示的,呃,一个字符串呢,调一个repla方法,Replapla方法呢,就能够将这个字符串当中出现的某一个字符串呢,诶替换成一个新的变量,我这呢用了一个Dollar符type来表示的,把这个字符串当中出现Dollar符type的位置呢,替换成type,替换成我们这个string,其实就是我们replace方法的一个使用,这不是咱们说的一个新方法啊,那以前呢,我们这个API1.5的时候呢,就定义过这个replace方法了,行,那打印CODE1S。
14:19
一样的对吧,哎,这呢是一个老方法的一个使用啊呃,还有一个方法大家可以用的,就是我们下边这个CTRLC这个咱们也来演示一下。啊,这个叫改进,或者我们是,呃,应该叫换一种方式来描述啊,换一种方法来做了,这个我叫CODE2,嗯,此时呢,是调我们string当中一个叫for密的方法啊,叫一个格式化方法,那么这呢是我们传进来的一个字符串,哎,把这个字符串当中,哎这个标识的啊这个位置我们替换成一个tap,哎,所以也是OK的啊这就是我们一个访问的方法的一个使用,这呢也是咱们的一个老方法啊,CODE2S。哎,再来测试。
15:03
哎,没有问题啊,也是OK的行,这呢是我们说的这个方式,那在我们JDK13当中呢,其实引入了一个新的方法,就是下边这个方法,哎把这个方法呢,我们也粘过来看一下。嗯嗯,这个啊,嗯,这个我们教程Q3吧。哎,CODE3的一个as outt,大家看到呢,这块有一个中华线啊,相当于是把它做了一个移除,呃,咱们先跑一下这个结果,然后再说一下这个事儿跑一下。嗯,这块呢,仍然能够做一个输出啊,说明呢,我们这个执行的话是没有问题的,那怎么来了一个划线呢,这很显然这个方法呢经被deer了啊,其然已经被移除掉了啊,啊不能叫移除掉了,已经被标识为过时了,没有移除还在我们的API当中,嗯,这个方法的话呢,是在我们这个JAVA13当中添加过来的,在13当中刚添加就从13当中做了一个depar,这个有点搞笑是吧?嗯,这个用我们一句比较经典的广告词叫什么呢?叫开始了吗?已经结束了啊是吧?哎,就成这个情况了,这个我想了想啊,说为什么他把这个方法给结束了呢?这个刚定义就不要了是吧?诶其实呢,大家来看我们调的这个form的方,Formity的这个方法里边呢,是用了一个叫form,然后调了一个form的一个form的方法,把当前的string和这个参数呢传过来,调了一些two string。
16:36
嗯,跟我们上边这个方法,这个我们是form的方法,这个方法呢,也是在1.5就有的啊,上边这个方法当中,大家你看里边呢,是不是也是拗了一个form form,呃,然后呢,把你这个呃行参的这个字符串呢传过来,然后调了个X,说白了就是我们刚才演示的这个扣袋二的这个操作的form的方法,跟咱们现在这个form这个方法,其实里边的操作呢,是完全一样的啊,调用的这个form的这个对象的,诶form方法啊是完全一样的,所以呢,可能是没有必要再去定义这样个方法了啊,因为有点冗余了,哎,总之的话呢,就是大家可以选择这里边的呃一种方式,两种方式哎,三种方式哎,就是替换掉我们原来的这样一种方式,因为这种方式呢,看着是稍微有点难受是吧,哎跟咱们原来使用这个字符串一样,就是可读性呢,会差一些,这个改进以后呢,这个可读性更好了,看可读性更好,哎这呢只能算是叫,哎咱们叫方式一是吧。
17:37
嗯,其实这个方式一的话呢,这谈不上说多新的方式,只不过是我们换成一个方法的方式来做了一个替换啊,哎,来实现的。好,那么整体上关于我们说这个温本块的使用呢,我们就呃到此结束了,应该说长得还是比较细致的啊,就大家呢,呃,这个后续可以考虑去使用,当然这个使用的话呢,一方面你可以装我们新的这个JAVA13的版本,另外的话呢,呃,如果你不想安装,这又又提到咱们之前的这个问题了哈,说我现在不想安装这个新的JDK,那你把这个新特性呢,也要了解一下,大家呢可以自己呢,呃,在自己的电脑上装一下这个JAVA13啊,或者叫JDK13,然后自己呢测试测试,呃,应该能看到这个文本块,虽然它是个预览模式啊,呃,但是在后续的这个Java的版本迭代当中,只会让它越来越完善这个,这个新特性呢,应该不会被删掉了,呃,因为大家已经看到我们在12当中呢,就提到这样一个类似的新特性,呃,在删掉以后呢,业界的呼声太高,所以说呢,这个文本块呢是会保留的啊,大家下来呢练一练哈。
我来说两句