语言入门-3:string的方法
1. 创建资源
开始实验之前,您需要先创建实验相关资源。
- 在实验室页面,单击创建资源。
- (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。
说明:资源创建过程需要3~5分钟(视资源不同开通时间有所差异,ACK等资源开通时间较长)。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。
实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。
资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息
2. 实验环境操作指南
在本系列实验中,有两种方法可以进行操作。一种是控制台方式,另一种是远程桌面的方式。接下来我们分别介绍这两种操作方式。
控制台方式
使用控制台方式操作实验,上手比较简单,对网络带宽的要求也不高。但是在编辑代码时,需要使用Vim工具进行文本编辑。对于初学者来说使用Vim工具需要熟悉其操作模式。
进入控制台环境
资源创建成功后,我们在右侧选择切换到Web Terminal。
切换到dev用户
本次实验的开发环境部署在dev用户的~/web目录中。因此我们执行这两条命令即可进入实验环境
su dev cd ~/web
Vim工具的用法
vim是一个命令行下的文本编译器。使用vim编辑文件时。我们只需要通过快捷键,而不需要鼠标就可以对文本文件进行编辑。但是这种文本编辑器的用法和常见的图形界面编辑器使用习惯差别较大。接下来我们简单介绍vim的使用。
3.1 进入Vim
在命令行中输入vim即可进入操作界面,这时的Vim没有打开任何文件。
vim
3.2 Vim的三种模式
和普通编译器不同的是,Vim包含了三种操作模式。分别是命令模式,编辑模式,末行模式。接下来我们来简单介绍一下三种模式的用法。
3.3 命令模式
在刚进入界面的时候,vim默认状态为命令模式。这种模式下,无法编辑文件,键盘输入也不会在屏幕上有任何显示,这种情况往往会让使用者感到困惑。这时候我们可以输入大写的ZZ,即可退出Vim。
3.4 编辑模式
我们继续输入vim回到编辑器。在命令模式下我们按下小写的i。此时我们会发现下部的提示已经变成了插入。这表示vim已经进入了编辑模式。
在编辑模式下我们就可以像正常的编辑器一样编辑文件。此处我们输入hello world。
在编辑完成之后,如果我们想退回命令模式,只需要按ECS键即可。按下该按钮之后我们会发现下部的插入提示消失了,这就表示vim回到了命令模式。
3.5 末行模式
回到命令模式之后,我们按下:键,这时下部的提示会变成:,这就表示vim进入了末行模式。在末行模式下,我们同样使用快捷命令操作vim,但是和命令模式不同的是,末行模式中输入的命令会显示的屏幕的最后一行。
接下来我们继续输入w demo.txt并按回车。会提示显示为如下内容。表示上面的内容已经保存到了demo.txt中。
最后我们按:q,该命令也可以退出vim。
4. 编辑index.js文件
4.1 创建新文件
当我们希望编辑特定文件时,我们可以输入vim 文件名。这时候在下部会看到"index.ts" [新]。表示vim自动创建了新文件。
vim index.ts
4.2 复制粘贴
在编辑模式下,vim同样可以使用ctrl+v进行粘贴。我们按i进入编辑模式之后,将下列内容粘贴到vim中。
//vim编辑模式:复制粘贴 测试 //在编辑模式中:可以使用上下左右 按键移动光标 //在命令模式中:可以使用hjkl 命令移动光标 //在编辑模式中:可以使用退格或者DEL键删除字符 //在命令模式中:可以使用x 命令删除字符
然后我们可以在命令模式和编辑模式下测试这几个命令的用法。
4.3 文件的保存和放弃
当我们编辑完成之后,可以在命令模式中通过ZZ命令直接保存并退出编辑器,也可以通过在末行模式中通过:w单独保存文件。如果我们希望通过末行模式保存并退出,可以使用:wq。
但是需要注意的时,如果文件在修改之后没有保存,是无法通过:q退出的。如果编辑过的文件是只读属性也无法通过ZZ退出。这时我们就可以使用:q!命令放弃所有的编辑内容,强制退出vim。
远程桌面方式
使用远程桌面方式进行实验是,可以使用VS Code编译器进行代码的编写和操作,相对控制台方式更加的直观。但是这种方式对网络带宽的要求比较高。
进入网页环境
1.1 资源创建成功后,我们在右侧选择切换到远程桌面。
1.2 在远程桌面页面中,点击Chromium网页浏览器。
登录RAM用户
2.1 浏览器启动后会默认打开阿里云的RAM用户登录页。在登录页面中我们点击下一步按钮。
2.2 接下来我们需要输入RAM用户的密码。密码显示在实验控制台左侧,我们点击子用户密码右侧的复制按钮。
复制完成后,我们在用户密码框中按Ctrl + V 复制密码,然后点击登录按钮
进入ECS的远程连接。
3.1 登录成功后,页面跳转到控制台,我们在控制台的搜索框中输入ECS,然后点击云服务器ECS进入云服务器控制台。
3.2 在ECS控制台中,我们找到实验创建的ECS,点击右侧的远程连接按钮。
3.3 在远程连接中选择通过VNC远程连接中的立即登录如果没有显示该选项,则可点击展开其他登录方式按钮。
登录VNC远程连接
4.1 初次登录VNC远程连接时需要先设置VNC密码。点击重置VNC密码按钮。
4.2 输入两次新的VNC密码,并点击确认。
4.3 VNC密码设置成功后,输入密码并点击确认。
4.4 VNC登录成功后会看到实验ECS的登录界面。
3. 基本方法
在上一个实验中,我们学习了TypeScript中的三种基本类型,number,boolean和string。其中string类型是在实际代码开发中使用的最多的类型,因此和前两中类型不同的是,string类型包含了大量的内置方法。在本实验中我们就来学习string方法中比较常用和有特色的部分。
- 字符串长度
string中最常用的功能就是获得长度,和其他功能不一样的是,获得长度使用的是string的属性值length。也就是在length并不需要添加括号。
需要注意的是,在TypeScript中,字符使用的UTF16格式,也就是一个字符的长度为16个bit。对于普通的英文和中文字符来说,每一个字符都占一个长度。但是对于emoji表情,一个字符需要占两个长度。我们修改index.ts文件为如下内容:
console.log("".length) console.log("1".length) console.log("一".length) console.log("🔥".length)
在终端选项卡输入如下命令编译并查看。验证了英文,中文,表情的字符长度。
tsc node index.js
- 大小写转换
大小写转换也是非常常用的功能,例如邮件地址,名字等不区分大小写的场合,为了便于字符串的查找和处理。我们往往会先将字符串统一大小,写然后再进行后续的操作。这时我们就可以使用toLocaleLowerCase或者toLocaleUpperCase方法进行转换。
需要注意的时,早期的TypeScript还提供了toLowerCase和toUpperCase两个转换方法,但是这两个方法对于一些小语种的兼容性并不好,因此现在已经不推荐使用。我们修改index.ts文件为如下内容:
var s:string = "String Function"; console.log(s.toLocaleLowerCase()); console.log(s.toLocaleUpperCase());
在终端选项卡输入如下命令编译并查看。
tsc node index.js
- 去除空白字符
用户在输入界面输入字段时,往往会无意中在字段的前面或者后面添加空格。由于空格在输入界面中显示的不明显,因此往往会被用户忽略,造成输入错误。因此在一些不允许空格输入的场合。程序设计者往往会将用户输入内容前后的连续空格去除,这时候就可以使用trim函数。
需要注意的时候trim函数都只会对字符串前后的连续空格生效而不会对中间空格生效。我们修改index.ts文件为如下内容:
console.log(" Ali yun ".trim())
在终端选项卡输入如下命令编译并查看。验证函数结果
tsc node index.js
4. 查询方法
string中的比较重要一类就是查询函数,也就是查找字符串中有没有包含特定的内容。在查找方法中,又可以分成两类查询方法,一类是直接查询某一个具体的子字符串,另一类是使用正则表达式进行匹配。关于正则表达式的内容本实验中暂时不涉及。因此本小节我们来学习三类比较常见的查找方法。
- 检查前缀后缀
在验证用户输入手机号时,我们除了需要检查手机号的长度,以及是否都是数字,还需要检查手机号的开头是否为特定数字,这是我们就可以使用startsWith方法进行判断。同样的如果检查用户输入的域名,有时候我们需要检查域名的结尾,这时候就可以使用endsWith方法。我们修改index.ts文件为如下内容:
console.log("13911100000".startsWith("139")) console.log("23911100000".startsWith("139")) console.log("aliyun.com".endsWith(".com")) console.log("aliyun.com".endsWith(".com.cn"))
在终端选项卡输入如下命令编译并查看。验证函数结果
tsc node index.js
- 全文查找
在查询方法里,用的最多的功能就是全文查找,也就是在一个字符串中检查是否包括另一个字符串,这时候我们可以使用includes方法实现全文查找的功能。
需要注意的时这个方法只返回字符串之间是否后包含关系,并不会返回其他信息。我们修改index.ts文件为如下内容:
console.log("阿里云全球培训中心".includes("培训"))
在终端选项卡输入如下命令编译并查看。验证函数结果
tsc node index.js
- 查找并定位
include方法虽然可以实现全文检索,但是无法定位到被查询字符串的位置。如果需要定位被查找字符串在全文中的具体位置,可以使用indexOf方法。该方法会从字符串的开头开始查找,在找到第一个被查询的字符串的时候返回他的位置,如果没有查询到,则返回-1。
如果我们希望从字符串的后面开始查找,则可以使用lastIndexOf方法。该方法会从后到前查找,并找到第一个符合的字符串,并返回他的位置。我们修改index.ts文件为如下内容:
console.log("www.taobao.com".indexOf("ao")) console.log("www.taobao.com".indexOf("/")) console.log("www.taobao.com".lastIndexOf("ao"))
在终端选项卡输入如下命令编译并查看。验证函数结果
tsc node index.js
5. 修改方法
接下来我们来看一下字符串中涉及到修改内容的一些方法。在TypeScript采用的也是不可变字符串策略。在使用这种策略的编程语言中,字符串在创建之后,内容就是固定不可变的。如果使用者希望改变字符串的内容,编程语言会根据用户的修改要求生成一个新的字符串。这样做的好处是避免了一个字符串在被不同的使用者修改造成的混乱。
因此在本小节中,介绍的所有修改字符串内容的方法,都不会改变原有字符串的内容,而是根据原有字符串生成一个新的字符串。在前面的小节中,我们学习过的大小写转换字符串也是符合这种测逻辑的。
- 重复
字符串重复函数repeat的的逻辑比较好理解,也就是将原有的字符串重复N边。我们修改index.ts文件为如下内容:
console.log("一二一、".repeat(3))
在终端选项卡输入如下命令编译并查看。验证函数结果
tsc node index.js
- 替换
替换是比较常见的一种修改方法。在TypeScript中替换方法名为replace。该方法包含两个参数,使用该方法会在原字符串中搜索第一个参数的字符串,并将搜索到子字符串替换成参数二的字符串。
需要注意的是,默认情况下该方法只会替换遇到的第一个满足条件的字符串。我们修改index.ts文件为如下内容:
console.log("2020年工作总结:\n1.2020业绩分析。\n2.2020改善措施".replace("2020", "2023"))
在终端选项卡输入如下命令编译并查看。验证函数结果
tsc node index.js
- 补足
在数据库存储或者报表显示时,为了保证存储的格式统一,或者显示的美观性。往往需要对字符串的长度进行统一。这时我们可以使用padStart或者padEnd在字符串的前后填补留白字符。
需要注意的是,TypeScript语言基本上每年都会发布一个新的版本。每个新版本都会发布一些新的方法,当我们使用tsc--init 生成的的tsconfig.json项目配置文件时,默认使用的TypeScript编译器是es2016版本。而padStart和padEnd方法是在es2017版本中加入的。
因此我们使用tsc编译时需要添加--target es2017参数来手动指定编译版本。我们修改index.ts文件为如下内容:
console.log("95".padStart(5, "0")) console.log("0.95".padEnd(5, "0"))
在终端选项卡输入如下命令编译并查看。验证函数结果
tsc --target es2017 node index.js
6. 截取方法
截取字符串是指从原字符串中,提取一部分内容,用于生成新得内容。生成得内容可以时字符串,也可以其他类型得对象。本小节中我们挑选了3个截取方法给大家介绍。
- 截取单字
截取单字方法属于最简单得截取方法,该方法会返回原字符串得第N个字符。具体得截取单字方法又分为两个。一个是charAt将截取的内容构成得单子字符串。另一个是charCodeAt根据截取字符的ASCII返回一个number。
需要注意的是,截取单字函数和大多数计算机函数类似,字符的索引是从0开始的。我们修改index.ts文件为如下内容:
console.log("零一二三四五六七八九十".charAt(3)) console.log("零一二三四五六七八九十".charCodeAt(3))
在终端选项卡输入如下命令编译并查看。验证函数结果
tsc node index.js
- 截取字符串
相比较截取单字函数,截取字符串函数slice会接受2个参数,分别表示需要截取的字符串的开头和结尾。
这里需要注意的是,slice参数的两个参数start和end,使用的是开闭区间定义方法,也就是说截取的字符串包括start所指向的字符,但是不包括end所指向的字符。我们修改index.ts文件为如下内容:
console.log("零一二三四五六七八九十".slice(2, 5))
在终端选项卡输入如下命令编译并查看。验证函数结果
tsc node index.js
- 分割字符串
最后一个要介绍的是分割字符串函数,我们设想当用户输入一个linux地址时,如果我们希望访问这个地址,或者判断该地址包含多少层子目录的时候,需要根据'/'分割符将每级的子目录分开,这时候就可以使用split方法。这个方法会根据分割符将源字符串分割成一个字符串数组。同样在解析域名的时候也可以使用相同的逻辑进行处理。
需要注意的是如果源字符串中不包含分割字符,则生成的数组只有一个元素。我们修改index.ts文件为如下内容:
console.log("/root/data/typescipt/实验".split("/")) console.log("www.taobao.com".split("."))
在终端选项卡输入如下命令编译并查看。验证函数结果
tsc node index.js
实验地址:https://developer.aliyun.com/adc/scenario/bef46ed7c7344843b90a6d3683bd17c6