1 字符串基础
1.1 定义字符串
-
通过String构造函数构造的字符串与字符串直接量的类型不同。前者为引用对象,后者为值类型的字符串。
var s1=new String('1');
var s2='2';
console.log(typeof s1);
console.log(typeof s2);
-
String() 也可以作为普通函数使用,把参数转换为字符串类型的值返回。
-
String() 可以带多个参数,但它仅处理第一个参数,并把它转换为字符串返回。
-
fromCharCode(),是string类提供的静态方法(即定义在对象本身,而不是定义在对象实例的方法)。参数为一系列Unicode编码,返回对应的字符串。
var a=[35835,32773,24744,22909],b=[];
for(var i in a){
b.push(String.fromCharCode(a[i]));
}
console.log(b.join(''));
1.2 字符串与数组
-
字符串被视为字符数组,可使用数组的中括号运算符来返回某个位置的字符(从0开始)
var s='hello';
console.log(s[0]);
var a='hello'[1];
console.log(a);
var b='hello'[5];
console.log(b);
'abc'[x];
字符串和数组只是相似,无法改变字符串中的单个字符。
-
字符串也无法直接使用数组的方法,必须通过call()方法间接使用
var s='hello';
console.log(s);
var a=Array.prototype.join.call(s,' ');
console.log(a);
1.3 字符串长度
length 属性返回字符串的长度,该属性只读,无法修改。
1.4 字符集
JavaScript使用Unicode字符集,允许在程序中直接使用Unicode编码表示字符,即将字符写成 \uxxxx 的形式,其中 xxxx 代表该字符的Unicode编码。例如,\u00A9代表版权符号。
var s='\u00A9'
console.log(s);
1.5 Base64转码
Base64是一种编码方法,可以将任意字符转成可打印字符。
JavaScript提供两个Base64相关方法:
- btoa():字符串或二进制值转为Base64编码
- atob():Base64编码转为原来的编码
上两个方法不适合非ASCII码的字符,会报错。
2 使用String
2.1 字符串的表示和值
- toString()——返回字符串的表示
- valueOf()——返回字符串的值
2.2 连接字符串
最简单的方法:使用加号运算符
使用 concat() 方法,返回一个新的字符串,不改变原来的字符串
- 该方法可接受多个参数
- 若参数不是字符串,该方法会先将其转为字符串,再连接
2.3 获取指定位置字符
1.charAt()
- 返回指定位置的字符(从0开始)
- 这个方法完全可以用数组下标替代
- 参数为负数或大于字符串长度,返回空字符串
2.charCodeAt()
-
返回给定位置字符的 Unicode 编码(十进制表示)
-
若无参数,返回首字母的 Unicode 编码
console.log('abc'.charCodeAt(1));
-
charCodeAt() 方法返回的 Unicode 编码不大于65536(0xFFFF),即只返回两个字节的字符的编码。若遇到 Unicode 编码大于65536的字符,需连续使用两次 charCodeAt(),不仅读入 charCodeAt(i),还要读入 charCodeAt(i+1),将两个16字节放在一起,才能得到准确字符。
2.4 获取字符的位置
- indexOf()——从字符串头部开始匹配,返回字符串的位置
- lastIndexOf()——从字符串尾部开始匹配,返回字符串位置
它们都还可以接受第二个参数,对于 indexOf() 方法,第二个参数表示从该位置向后匹配,对于 lastIndexOf() 方法,则表示从该位置起向前匹配。
console.log('helloworld'.indexOf('o',7));
console.log('helloworld'.lastIndexOf('o',5));
对于indexOf() 方法的第二个参数:
- 若值为负数,则视为0,相当于从字符串第一个字符开始查找
- 若省略这个参数,也将从字符串第一个字符开始查找
- 若值大于等于length属性,视为当前字符串中没有指定的子字符串,返回-1
【补充】 leetcode 763. 划分字母区间:(10.22打卡)
字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一个字母只会出现在其中的一个片段。返回一个表示每个字符串片段的长度的列表。
示例:
输入:S = “ababcbacadefegdehijhklij”
输出:[9,7,8]
解释:
划分结果为 “ababcbaca”, “defegde”, “hijhklij”。
每个字母最多出现在一个片段中。
像 “ababcbacadefegde”, “hijhklij” 的划分是错误的,因为划分的片段数较少。
var partitionLabels = function(S) {
var ret=[];
function fenduan(start,s,last){
while(last<S.length&&start<S.length){
s=S[start];
last=S.lastIndexOf(s);
for(let i=start+1;i<last;i++){
last=last>S.lastIndexOf(S[i])?last:S.lastIndexOf(S[i]);
}
ret.push(S.slice(start,last+1).length);
start=last+1;
}
}
fenduan(0,S[0],0);
return ret;
};
2.5 查找字符串
1.search()——查找参数字符串在调用字符串中第一次出现的位置
-
参数为正则表达式(RegExp对象),若不是,JavaScript会使用RegExp()构造函数把它转换成RegExp对象
-
从左到右查找,返回第一个匹配的子字符串的起始下标位置,若没有,返回-1
-
无法查找指定范围,始终返回第一个匹配子字符串的下标位置
var s='http://www.baidu.com';
console.log(s.search('://'));
console.log(s.search('\:'));
console.log(s.search('//'));
console.log(s.search('/w'));
2.match()——找出所有匹配的字符串,并存储在一个数组中返回
var s='http://www.baidu.com';
var a=s.match(/w/g);
console.log(a);
- match()方法返回的是一个数组,若不是全局匹配,则只能执行一次匹配
- 若没有找到匹配字符,则返回null,而不是返回空数组
- 不执行全局匹配时,若匹配模式包含子表达式,则返回的数组中包含子表达式匹配的信息
2.6 截取字符串
1.slice()——从原字符串取出子字符串并返回,不改变原字符串
- 第一个参数是子字符串的开始位置,第二个参数为结束位置(不含该位置)
- 若省略第二个参数,则表示子字符串一直到原字符串结束
- 若参数为负数,表示从结尾开始倒数计算的位置
- 若第一个参数大于第二个参数,返回空字符串
2.substring()——从原字符串取出子字符串并返回,不改变原字符串
-
与slice()作用相同,建议优先使用slice()
-
第一个参数是子字符串的开始位置,第二个参数为结束位置(不含该位置)
-
若省略第二个参数,则表示子字符串一直到原字符串结束
-
若第一个参数大于第二个参数,返回空字符串substring() 方法会自动更换两个参数的位置
-
若参数为负数,substring() 方法会自动将负数转为0
console.log('JavaScript'.substring(-3));
console.log('JavaScript'.substring(4,-3));
3.substr()——从原字符串取出子字符串并返回,不改变原字符串
-
第一个参数是子字符串的开始位置,第二个参数为子字符串的长度
-
若省略第二个参数,则表示子字符串一直到原字符串结束
-
若第一个参数为负数,表示倒数计算字符的位置,若第二个参数为负数,将被自动转为0,因此返回空字符串
console.log('JavaScript'.substr(-6));
console.log('JavaScript'.substr(3,-1));
2.7 替换字符串
replace()——替换字符串
-
第一个参数表示执行匹配的正则表达式(也可以传递字符串),第二个参数表示准备代替匹配的子字符串(也可以是替换函数)
-
在replace() 方法中约定了一个特殊的字符($),这个美元符号如果附加一个序号就表示对正则表达式中匹配的子表达式存储的字符串引用
console.log('JavaScript'.replace(/(Java)(Script)/,'$2-$1'));
特殊字符:
$&——与正则表达式相匹配的子字符串
$`——位于匹配子字符串左侧的文本
$’——位于匹配子字符串右侧的文本
$
—
—
表
示
——表示
——表示符号
console.log('JavaScript'.replace(/Script/,'$&'));
2.8 大小写转换
- toLocaleLowerCase()——转换成小写
- toLocaleUpperCase()——转换成大写
- toLowerCase()——转成小写
- toUpperCase()——转成大写
2.9 比较字符串
JavaScript在比较字符串大小时,根据字符的Unicode编码大小,逐位进行比较
2.10 转换为数组
split() 方法——根据指定的分隔符把字符串分解为数组,数组中不包含分隔符
-
参数为空字符串,则按单个字符分切
-
参数为空,则将整个字符串作为一个元素的数组返回
-
参数为正则表达式,则将以匹配文本作为分隔符进行切分
-
若正则表达式匹配的文字位于字符串的边沿,则split() 方法也执行分割操作,为数组添加一个空元素
-
支持第二个参数,该参数是可选的整数,用来指定返回数组的最大长度
-
若想使返回的数组包括分隔符或分隔符的一个或多个部分,可以使用带子表达式的正则表达式来实现
console.log('aa2bb3cc4dd5e678f12'.split(/(\d)/));
2.11 修剪字符串
trim() 方法用于去除字符串两端的空格,返回一个新字符串,不改变原字符串
- 该方法去除的不仅是空格,还包括制表符(\t、\v)、换行符(\n)和回车符(\r)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)