00:00
接下来我们来讲一讲skyla当中的字符串,呃,那对于字符串儿而言,其实跟Java里边基本上是类似的,大家会发现都是以双引号引起来的一部分文本内容,我们就可以把它当成一个字符串值来进行处理和表示,那么在字符串具体处理的过程当中呢,最常见的当然直接就是打印输出了,那我们在一般打印想要打印输出一些内容的时候呢,又可以用到一些字符串相关的操作,那接下来我们就把字符串输出时候的一些操作来做一个讲解啊,那大家可以看到。一些基本的用法有字符串拼接啊,就是如果我们想要把两个字符串拼在一起,甚至我们想把字符串和一些整形的变量拼在一起的话,都可以直接用一个加这样的一个符号做一个连接啊,那另外就是我们在字符串进行输出的时候呢,可以用print f,也就是所谓的格式化字符串做进行输出,另外我们还可以用所谓的差值字符串,也就是说可以进行一个字符串模板的设计啊,稍后我们会给大家在代码里边一一做一个实现和说明,接下来我们就打开代码新建一个测试文件。
01:21
同样还是新建一个scla的单例对象object,目前我们叫做TEST04,主要是用来测试string相关的内容。方法里边我们把这三条希望测试的内容写出来,首先一个字符串,我们说它是通过加号可以进行拼接进行连接的啊,这里我们可以随便定义这样的一种场景啊,比方说我们还是关于学生信息student这种场景,我们可以定义一个学生的name,它是一个STEM类型,比说我们有有一个学生叫做Alice,然后另外我们可以定义一个他的年龄,Age是一个int数据类型,八岁,然后接下来我们就可以直接印啊,打印最常见的当然就是print line了啊,直接打印一行,然后回车,回车换行,直接在我们控制台上就是完整的一行显示,那这里边我们可以拼接一个多少岁的J,哎,上硅谷行学习好,那前面我们是多少岁的,那就是age age是一个整形的。
02:33
量,而后边我们的name呢?呃,那那其实是一个字符串,而且我们还要加多少岁的,这其实都是字符串,直接用加号连接就可以了,那这里我们可以来一个碎的,后边是name Alice,然后再加上。在上硅谷学习,大家看这样的一个写法,其实跟Java里边是非常近的。所有的。
03:05
啊,我们只要是能够想到的一些基本的变量啊,其实都可以跟字符串用加号进行连接,然后拼成一个完整的字符串进行打印输出,好,那这里我们可以直接运行一下,看看效果怎么样。没有问题,我们可以看到输出了18岁的爱丽丝在上硅谷学习,这里要给大家呃说的一个是对于字符串拼接呢,除了加号之外,还可以用一个星号,所以大家如果直观的来看的话,加号。字符串拼接它属于连接操作啊,属于加嘛,相加操作嘛,那对于这个星号而言,这不就属于相乘操作吗?所以星号的作用是用于将一个字符串复制多次拼接,所以我们可以认为这是一个字符串乘法操作,把同一个字符串连续的复制好几份再拼在一起啊,那大家其实知道所谓的乘法不就是多个。
04:15
元素的相加的结果吗?啊,比方说我们这里边直接print line print line,呃,当前的name如果要是乘以三的话,表示什么含义呢?那其实就是三个name相加,所以它合在一起,其实就是Alice丝加Alice丝加ALICE3个Alice丝拼在一起的结果,我们可以看一下这个输出的内容。大家可以看到就是完全拼在一起的三个Alice啊,这种用法在有一些场景下会大大的节省我们的,呃,处理这个逻辑的代码啊,大家只要用一个星号啊,做一个字符串的乘法,就可以解决复制多次的这种应用了,这是第一种情况,做字符串拼接,然后接下来呢,我们再说一下字符串的格式化输出,就要用到一个所谓的print f这样一个操作了,呃,这个操作对于熟悉C语言的同学来讲应该并不陌生,它其实是代表了想要用某种格式化方法对字符串进行设计,进行设置的这样的一种呃应用,那我们看一下当前如果说我们用line的话,那就是后面的内容一个字符串完整的打印,那如果要是print f的话,会看到后边其实。
05:30
能够输出的呢,也是可以直接给一个字符串去做一个输出,那么在这个字符串里边大家就会发现啊,那前面我们这个做拼接的时候,你要不停的把这个字符串打断,然后不停的呢,有一个变量,然后又有一段这个奇奇怪怪的一小段字符串,然后不停的用加号把它们做拼接连接,这种方式有时候我们会觉得有点麻烦,那能不能我就直接用一个字符串串双引号,把该表示的东西全写在这里边。
06:02
然后直接打印就完事了呢,哎,当然大家想到如果要是你没有变量的话,这个很简单,直接写就完了,但如果有变量,那怎么办呢?我们可以在里边相当于有一个占位符。呃,这里边print f里边的占位符呢,那就是分号啊,当然这里边百分号我们后边还应该跟一个对应的格式,就是比如当前我们是这个多少岁的age是一个整形的变量,那么我们这里边就应该是百分之分号D,呃,然后后面就照常写就可以了,更多碎的,然后后边是谁谁的话,Name这一个参数一个变量,是一个字符串,那就是百分号,后面是S100分号S哦,是一个符串类型的变量,后面在上回五,哎,那么大家看前面我们只是有了一个占位符,那具体这个占位符到底指代哪个变量,那还是要完整的定义出来的,那变量怎么样,怎么样定义呢?跟在后边作为后续的参数传给S就可以了。所以前面我们第一个参数是H,二个参数是为啊,这样的话,这就是一个完整。
07:15
数数,我们也可以把它做一个打印,看一看效果跟前面是不是一样,大家看完全一致,18岁的爱丽丝在上硅谷学习啊,这就是关于print f的用法,其实跟C语言里边的这个做法是一样的啊,大家可以也可以认为是对于C语言的一个扩展和延续,然后我们接下来呢,呃,重点要给大家说的是第三个特点,就是所谓的字符串差值,或者叫做字符串模板的这种用法啊,那这种用法其实是。就是想要把我们之前讲到的这两种用法结合起来,而且避免一些他们的复杂的地方。首先大家会想到我们这里边想要把这个变量啊,嵌在一段字符串里边,做一个打印输出,呃,那前面我们第一种用法呢,这个显然是不太方便的啊,因为你要写不同的打断之后的啊每一个字符串,然后用加号把它连接起来,中间插进各种各样的这个变量,这其实是很不方便的。第二种用法print f呢,呃,看起来稍微的好一点,因为整个要显示的内容我们在这里就都已经定义出来了,但是呢,这个百分号又会比较麻烦,它的这个位置和后边我们变量填入的这个顺序,你必须要一一对应,而且呢,你还必须考虑诶,到底是整形还是字符串,到底是百分号D还是百分号S,这都得我们程序员做一个具体的考虑,那能不能避免这些复杂的操作呢?那比方说我在这个。
08:48
还是基于这个print f这种想法啊,我直接就给一个字符串,然后在这里边你想要使用哪个变量,我直接定义写在这儿不就完了吗。啊,基于这样的想法,在scda里边其实就设计了这样一种用法,就是所谓的字符串插值,或者叫字符串模板,我们直接来看一下上面的这一句啊,18岁的Alice在上硅谷学习用字符串模板应该怎么写它,还是直接print line就可以了,不需要在print f了,要格式化了啊,那当然了,里边就是一个完整的字符串,用双引号引起来,所以大家需要注意,如果我们当前是一个字符串模板的话,前边要加一个特别的符号。
09:31
非常简单,就直接加一个S就可以了。需要注意,这种语法是符合scla的语法规则的,呃,有些同学可能会完全不理解,这突然前面加一个S,这表示什么呢?呃,大家不要单独的看这个S啊,它并不是变量,也不是关键字。而是一个S后边加双引号一个字符串。它们合起来,这表示它是一个模板字符串啊,所以这就是一个模板字符串的语法表表示,然后有了这个表示之后,那么在里边我用到A,用到name这样的变量的时候就可以怎么用呢?里边可以直接用一个Dollar符,然后加上花括号,把对应的变量填进来就可以了啊,具体来看的话就是前面我不是要H吗?那就直接all age。
10:23
然后后边这么多岁的,后边是honor内谁Alice放在这儿啊,那么他在上硅谷学习,那这样直接写我就已经知道了,这里要填的是H这个变量,后边要填的是name这个变量,要填什么变量,在当前字符串的哪个位置,一目了然,根本不需要像前面我们这样复杂的拼接,或者是这里单独占位,后边再去声明,按照位置去声明啊,这样的话就看起来简洁很多。来,我们看一下运行的结果是不是还是一样。
11:02
没有问题啊,当然了,前面我们这个print f,它本身是只在当前行输出我们定义好的这一句话啊,那本身完成之后是不做这个行的,对吧?啊,所以前面如果我们要是print line把它做一个回车换行的话,后面这这个第三个字符串模板就可以在下边完整的打印出来了,同样还是18岁的爱丽丝在上硅谷学习。这就是字符字符串模板的用法啊,这个比较特殊一点啊,比较也是比较有趣,比较方便的一种用法啊,那么这种用法其实有同学如果学习过Linux里边的这个shell编程的话啊,那其实大家就会发现在Li Linux整个环境里边,大家如果要是去shell脚本里边去定义一个变量啊,直接把这个变量在这个字符串里面要做一个输出,做一个使用的话,它其实就是这种方式,就是直接用Dollar,然后后边啊就是如果。它没有任何的歧义的话,这个花括号也可以不加,那为了方便跟后边的其他符号分割开,一般情况我们把这个变量要用一个花括号括起来,这就是不同的语言里边可以有非常好用的方法可以互相借鉴啊,那当然了,所谓的字符串模板在skyla里边呢,不仅仅是S打头,然后后面加一个字符串这样的一种用法,另外还有一种是F打头啊,大家其实想到F是什么呢?F这里边其实就是类似于我们前面print f的这个F,它是格式化的意思啊,所以接下来我们举一个特殊一点的例子啊,比方说我们这里边还是本身定一个number,这个number,呃,我直接来一个2.3456,那大家看本身应该是一个小数,那在GALA里边这个小数它本身对应的类型应该是什么样的呢?
12:53
诶,它其实类型是float啊,其实是double,是默认是double啊,那如果说他想要把它定义成float的话,也是可以的,大家看这里边你直接定义后面就报错了,对吧?啊,这里边默认一个小数,输入进来之后认为它是double啊,那如果说你想把它转成float的话,那后面加一个F,这样的话,哎,我们定义的就是一个浮点类型的。
13:22
一个数据了啊,一个小数了啊,那当然这个我们可以放到后边讲到数据类型的时候再给大家详细讲解啊,我们现在只要知道它是一个double类型就可以了,现在我如果要把它放在一个一个模板字符串里边做输出的话,这个大家应该想到比较简单啊,直接print line s后里边,比方说我们说呃,当前这个number啊,The number is多少,然后我就直接来一个Dollar number,把它写进来就可以了,这样如果我们直接输出的话。但这里边儿我并没有指定它到底是什么格式,什么类型,它就会把当前的对应的这个number数值完整的输出,这是完全没有问题的,但是有时候大家就会想到,那如果说我这里边这个小数想要输出的时候,就不要这么多位,对吧?有时候double类型,它后面的那个小精度是很高的,后面小数位数很多,我最后输出呢,可能只要保留,呃,可能只要保留两位小数。
14:20
那这个时候怎么办呢?这个时候这就不能直接用SS的话,这就是直接把这个变量填进来嘛,那这个时候我们就要用F模格式化模板字符串,哎,这个时候给大家一个注释,这个叫格式化模板字符串,这个时候后边我们对于这个number呢,就可以有别的一些要求了,那这个要求跟前边print f的这种写法其实也很像,它就直接可以在这里。一个分号。然后后面只是它当前的格式,那后面我可以直接指定一个2.2F,哎,那这什么意思呢?F指的是当前是一个浮点类型,那前面的2.2呢?哎,大家知道,就是前面的这个二指的是整个数的长度是二,就是不够的话,前面是要补补这个空格的啊,那如果要是超过整个数的长度超过二的话,那就没没关系啊,直接把这个数输出就可以了,然后后边的这个点二呢,就是表示当前的浮点数据只保留两位小数。
15:28
啊,这个时候我们再来输出一下,大家可以看到当前的number就变成了2.35,它做了一个四舍五入。这是关于这个模板字符串的一些特殊的用法啊,当然关于模板模模板字符串除了S和作为这个前置的标志之外,另外还有一个就是弱,就是可以在这里边直接用一个raw开头,然后后边不出一段这个对应的字符,那假如说用到了这个RA的话。
16:03
会发现在后边其实我们只要按照这个格式啊,随便写什么都可以,那么它不会把对应的这个百分号,还有2.2F解析成要做格式化的这种处理,它只是把我们对应的这个变量填进来,然后其他的所有的。内容啊,全部按照当前原始的样子,RA大家知道,就是原始的未加工的意思吧,全部都按照原始的样子输出,这就是RA这样的一个用法。呃,这里提到字符串模板呢,就得不另外提一个在skyda里边经常会用到的关于字符串表表示和输出的方法啊,这个就是所谓的三引号表示一个字符串去单独的再给大家列出来另外的一个用法,所谓的单引号表示读串啊,那么这种用法一般情况是要保持多行字符串的原格式。
17:09
不出这是什么意思呢?呃,简单来讲的话,呃,我们想象一下,就是在有一些使用的过程当中,我们在处理一些应用的时候,往往需要去写一些写CQ,哎,那大家知道,如果要是比较简短的话,比方说哎,我们s select芯啊,FROM1张表,From table啊,那直接我们排成一行啊,直接在一行里边把这个字符串引起来就可以了,那更多的场景,我们其实这个CQ是非常复杂的,可能有各种嵌套语句啊,可能有各种各样的条件,那这种情况我们往往希望做一个多行显示,但如果说我们只是用这样的一个双引号引起来的话,大家可能会想到我这样的话多行显示应该怎么样呢?那是不是就必须是就像Java里边的写法一样,前面一个。双引号引起来,然后加号做一个拼接,剩下的我可以换行换到下一行对吧?呃,之前我们说过skyla的编译器是可以自动的检测我们的语法,哎,当前到底是换行还是已经结束的,这样跟Java里面一样的表示是可以的,但这个就有点麻烦呀,诶,那我们这个模板字符串,像这种能不能直接使用模板字符串做这样的一个操作呢?哎,我能不能直接S后边就。
18:23
就没有这样的一些,呃,大家可以看到,就是我能不能直接这么去做这个操作呢?那如果说我要是多行输出的话,分换行之后啊,前面加一个S,做一个模板字符串,你是不能这么去写的,除非还是两个模板字符串做相加,除非还是这样,那他就会想到这你就没有起到模板字符串的作用吧,我们本来就是不想再去做加号拼接了,不想把它拆开了,那怎么办呢?哎,这个其实也简单,就是模板字符串我们可以和一个三引号显示。
19:02
单引号,接下来来看回车换行的时候啊,前面有一个竖线作为一个分隔的标志,每一行开始的标志,然后后边呢,诶,我们直接就可以写当前行要输出什么,比方说我可以直接select。芯,然后下面我可以直接from,比方说有一张表,有一张表就叫做student吧,Student,然后接下来我可以定义当前的条件where啊,比方说我要求当前的name就等于有一个,里面有一个字段叫做name name就等于当前的name,当前的这个Alice,然后呃,另外我们还可以and地址大于当前你的H,哎,就所有的条件我们都可以直接列在这里,就把它写出来,然后里边还可以用之前已经定义好的这些变量做一个字符串差值。
20:02
啊,大家看后面还有一个点strip market这样一个方法,这表示的就是。这是字符串本身的一个方法啊,表示我们可以忽略边界,就是打印输出的时候呢,你不要把前边的这些空格都输出,也不要输出我格式化的这个前面的竖线,只要输出后边的内容就可以了,哎,这样的话我们可以看一下最终得到的内容是什么样的啊,我们把前面定义一个,这就叫做一条CQ,其中我们可以把它输出print EQ。大家可以看到,最终就是按照我们定义好的格式,直接顶格把我们写出了这条CQ完整的输出了,哎,这就是在scla里边啊,比较好用的一些做法,哎,我们用这种三引号的表示呢。随便去做这个换行显示都可以保持原有的格式直接输出啊,所以整体来讲,Skyla里边的字符串操作还是非常灵活,非常方便。
我来说两句