工具: PlayGround
源码: GitHub TypeScript
String
在TypeScript中, string
作为基础的字符串类型, 使用单引号(‘’)或双引号(“”)来包含字符串,使用反引号(`)来格式化文本或内嵌表达式, 存储的是UTF-16字符串序列。
let name: string = "TypeScript";
let years: number = 5;
let words: string = `您好,今年是${name}发布${years + 1}周年`;
对于字符串处理相关,提供了String
的对象
// 注意: 创建参数为任意类型
const str = new String("hello");
console.log(str); // String: "hello"
注:string基础数据和String对象可以交互使用
String
对象提供的接口如下:
接口 | 返回值 | 描述 |
---|---|---|
length | number | 获取String 对象的长度 |
toString() | string | 返回字符串 |
charAt() | string | 返回指定位置字符 |
charCodeAt() | number | 返回指定的位置字符的 Unicode 编码 |
concat() | string | 连接多个字符串,并返回新的字符串 |
indexOf() | number | 返回某个指定的字符串值在字符串中首次出现的位置 |
lastIndexOf() | number | 从后向前搜索字符串,并从起始位置(0)开始计算返回字符串最后出现的位置 |
localeCompare() | number | 用本地特定的顺序来比较两个字符串 |
match() | RegExpMatchArray | 查找找到一个或多个正则表达式的匹配 |
replace() | string | 替换与正则表达式匹配的子串 |
search() | number | 检索与正则表达式相匹配的值 |
slice() | string | 提取字符串的片断,并在新的字符串中返回被提取的部分 |
split() | string[] | 把字符串分割为子字符串数组 |
substr() | string | 从起始索引提取字符串中指定数目的字符 |
substring() | string | 提取字符串中两个指定的索引号之间的字符 |
toLowerCase() | string | 把字符串转换为小写 |
toLocaleLowerCase() | string | 根据主机的语言环境把字符串转换为小写 |
toUpperCase() | string | 把字符串转换为大写 |
toLocaleUpperCase() | string | 据主机的语言环境把字符串转换为大写 |
trim() | string | 从字符串中删除前后的空格和行结束符 |
valueOf() | string | 返回指定字符串对象的原始值 |
由于支持的函数比较多,我们将分块编写他们的实例代码相关, 以便对String
有更好的了解。
示例
使用string基础数据类型可以很方便String对象提供的接口。针对于String对象的参数类型为:any
let str: string = "语言";
console.log(str.length); // 2
let strObj = new String("hello");
console.log(strObj.length); // 5
const strList = ["1", "2", "3", "4"];
console.log(strList.length); // 4
const strList_1 = new String(strList);
// "1,2,3,4", 7
console.log(strList_1, strList_1.length);
注: 数组传入String对象中,会被转换为字符串,注意。
在JavaScript或TypeScript中,字符串的编码格式是: UTF-16, 因此中英文的字符个数均为1。针对于字符串允许进行遍历。
// string基础类型的遍历
let str = "hello";
for (let i = 0; i < str.length; ++i) {
console.log(str[i]);
}
// String对象的遍历
let strObj = new String("typescript");
for (let i = 0; i < strObj.length; i++) {
console.log(strObj[i]);
}
在开发中,经常会出现 数字 和 字符串 混用的情况,主要有:
// 将number赋值给string
let index = 1;
let content:string = index.toString();
console.log(content);
let num: number = 6;
let strName: string = "ES";
// "使用+号组合字符串:", "ES:6"
console.log("使用+号组合字符串:", strName + ":" + num);
// "使用反引号格式化字符串:", "ES:6"
console.log("使用反引号格式化字符串:", `${strName}:${num}`);
注: 推荐使用反引号对字符串进行格式化
检测字符串是否为空推荐使用!
let value: string | null = "";
if (!value) {
console.log("value is null");
}
获取指定字符相关
charAt
根据索引获取指定位置字符,不支持负数
const str: string = "Hello";
// 获取首位字符
console.log(str.charAt(0));
// 获取末尾字符
console.log(str.charAt(str.length-1));
charCodeAt
获取指定索引位置的Unicode
值
const str: string = "abc";
console.log(str.charCodeAt(0)); // 97
console.log(str.charCodeAt(str.length-1)); // 99
console.log(str.charCodeAt(-1)); // NaN
console.log(str.charCodeAt(5)); // NaN
注: 非索引位置返回的为NaN
fromCharCode
String构造中提供的方法, 可将Unicode
值转换为字符串
const numList: number[] = [97, 98, 99];
let str = ""
for (let i = 0; i < numList.length; ++i) {
str += String.fromCharCode(numList[i]);
}
console.log(str); // abc
- 获取字符串首先出现的位置
// ------------ indexOf 从左往右 ------------
const str: string = "Hello TypeScript";
console.log(str.indexOf("l", 0)); // 2
console.log(str.indexOf("l", 10)); // -1
// ------------ lastIndexOf 从右往左------------
const str: string = "Hello TypeScript";
const strObj = new String(str);
// 使用string获取位置,
let pos_1 = str.lastIndexOf("l");
console.log(pos_1); // 3
// 使用String对象获取位置
let pos_2 = strObj.lastIndexOf("a");
console.log(pos_2); // -1
注: 如果获取不到位置,都会返回-1
截取字符串相关
从开始位置到结束位置截取字符串的主要方法有:
slice(start?: number, end?: number): string
substring(start: number, end?: number): string
substr(from: number, length?: number): string
const str = "Hello TypeScript";
// 使用 slice 方法截取字符串
const slicedStr = str.slice(6, 13);
console.log(slicedStr); // 输出 "TypeScr"
// 使用 substr 方法截取字符串
const substrStr = str.substr(6, 9);
console.log(substrStr); // 输出 "TypeScript"
// 使用 substring 方法截取字符串
const substringStr = str.substring(6, 13);
console.log(substringStr); // 输出 "TypeScr"
字符串大小写相关
大小写的方法主要有:
toLowerCase
将字符串变为小写toUpperCase
将字符串变为大写toLocaleLowerCase
将字符串根据语言环境转换为小写toLocaleUpperCase
将字符串根据语言环境转换为大写
const str = "HELLO TypeScript";
// 在默认语言环境(中文简体)下,将字符串转换为小写形式
const resultDefault = str.toLocaleLowerCase();
console.log(resultDefault); // 输出 "hello typescript"
// 在英文环境下,将字符串转换为小写形式
const resultEnglish = str.toLocaleLowerCase("en-US");
console.log(resultEnglish); // 输出 "hello typescript"
// 在土耳其语环境下,将字符串转换为小写形式
const resultTurkish = str.toLocaleLowerCase("tr-TR");
console.log(resultTurkish); // 输出 "hello typescript"
组合字符串
主要接口是: String.concat(...strings: string[]): string
支持参数输入一个或者多个字符串
// 示例1
let str1 = "Hello";
let str2 = " TypeScript";
let content = str1.concat(str2);
console.log(content); // "Hello TypeScript"
// 示例2:
let result = "".concat("how ", "are ", "you", "?");
console.log(result); // "how are you?"
// 示例3:
let code = "";
const strList = ["Please", "use", "TypeScript"];
for (let i = 0; i < strList.length; ++i) {
code = code.concat(strList[i]) + " ";
}
console.log(code.trim()); // "Please use TypeScript"
拆分字符串
主要接口是: split
,简单的示例:
const str = "Please use TypeScript";
let strList = str.split(" ");
console.log(strList); // ["Please", "use", "TypeScript"]
在实际的开发中,注意字符串的判定:
let str = "";
let dataList = str.split("#");
console.log(dataList); // [""]
// 如果单纯的使用 ! 或者 length <=0 是无法进行安全检测的
console.log(!dataList, dataList.length); // false, 1
// 推荐:
let str = "";
let dataList = str.split("#");
if (dataList[0] == "") {
console.error("split error");
}
正则表达式匹配相关
主要的方法有:
match
查找找到一个或多个正则表达式的匹配search
检索与正则表达式相匹配的值replace
替换与正则表达式匹配的子串
简单的实例:
const str = "Hello, my phone number is 123-456-7890";
// 使用 match 方法查找匹配的字符串
const matchResult = str.match(/\d{3}-\d{3}-\d{4}/);
console.log(matchResult); // 输出 ["123-456-7890"]
// 使用 replace 方法替换匹配的字符串
const replacedStr = str.replace(/\d{3}-\d{3}-\d{4}/, "XXX-XXX-XXXX");
console.log(replacedStr); // 输出 "Hello, my phone number is XXX-XXX-XXXX"
// 使用 search 方法搜索匹配的字符串
const searchResult = str.search(/\d{3}-\d{3}-\d{4}/);
console.log(searchResult); // 输出 26