字符串前言
在日常开发中,String 对象(字符串对象)的使用频率是非常高的,所以非常有必要记录熟悉这些方法
tips:需要注意的是:字符串的所有方法,都不会改变原字符串(字符串的不可变性),操作完成后会返回一个新的值。
字符串的常见方法如下。
查找字符串
1、indexOf()/lastIndexOf():获取字符串中指定内容的索引值
语法1:
索引值 = str.indexOf(想要查询的字符串);
可以检索一个字符串中是否含有指定内容。如果字符串中含有该内容,则会返回其第一次出现的索引;如果没有找到指定的内容,则返回 -1。
因此可以得出一个重要技巧:
- 如果获取的索引值为 0,说明字符串是以查询的参数为开头的。
- 如果获取的索引值为-1,说明这个字符串中没有指定的内容。
语法2:
这个方法还可以指定第二个参数,用来指定查找的起始位置。语法如下:
索引值 = str.indexOf(想要查询的字符串, [起始位置]);
2、search():获取字符串中指定内容的索引(参数里一般是正则)
语法:
索引值 = str.search(想要查找的字符串);
索引值 = str.search(正则表达式);
3、includes():字符串中是否包含指定的内容
语法:
布尔值 = str.includes(想要查找的字符串, [position]);
解释:判断一个字符串中是否含有指定内容。如果字符串中含有该内容,则会返回 true;否则返回 false。
参数中的 position
:如果不指定,则默认为0;如果指定,则规定了检索的起始位置。
4、startsWith():字符串是否以指定的内容开头
语法:
布尔值 = str.startsWith(想要查找的内容, [position]);
解释:判断一个字符串是否以指定的子字符串开头。如果是,则返回 true;否则返回 false。
参数中的position:
如果不指定,则默认为0。
如果指定,则规定了检索的起始位置。检索的范围包括:这个指定位置开始,直到字符串的末尾。即:[position, str.length)
5、endsWith():字符串是否以指定的内容结尾
语法:
布尔值 = str.endsWith(想要查找的内容, [position]);
解释:判断一个字符串是否以指定的子字符串结尾。如果是,则返回 true;否则返回 false。
获取指定位置的字符
1、charAt(index)
语法:
字符 = str.charAt(index);
解释:返回字符串指定位置的字符。这里的 str.charAt(index)
和str[index]
的效果是一样的。
代码举例:
var str = new String('smyhvae');
for (var i = 0; i < str.length; i++) {
console.log(str.charAt(i));
}
2、str[index]
str.charAt(index)
和str[index]
的效果是一样的,不再赘述。区别在于:str[index]
是 H5 标准里新增的特性。
字符串截取
1、slice()
slice() 方法用的最多。
语法:
新字符串 = str.slice(开始索引, 结束索引); //两个参数都是索引值。包左不包右。
注意:上面的参数,包左不包右。参数举例如下:
(2, 5)
截取时,包左不包右。(2)
表示从指定的索引位置开始,截取到最后。(-3)
表示从倒数第三个开始,截取到最后。(1, -1)
表示从第一个截取到倒数第一个。(5, 2)
表示前面的大,后面的小,返回值为空。
2、substring()
语法:
新字符串 = str.substring(开始索引, 结束索引); //两个参数都是索引值。包左不包右。
substring()
和slice()
是类似的。但不同之处在于:
substring()
不能接受负值作为参数。如果传递了一个负值,则默认使用 0。substring()
还会自动调整参数的位置,如果第二个参数小于第一个,则自动交换。比如说,substring(1, 0)
相当于截取的是第一个字符。
3、substr()
语法:
字符串 = str.substr(开始索引, 截取的长度);
解释:从字符串中截取指定的内容。不会修改原字符串,而是将截取到的内容返回。
注意,这个方法的第二个参数截取的长度,不是结束索引。
参数举例:
(2,4)
从索引值为 2 的字符开始,截取 4 个字符。(1)
从指定位置开始,截取到最后。(-3)
从倒数第几个开始,截取到最后。
concat()
语法:
新字符串 = str1.concat(str2); //连接两个字符串
解释:字符串的连接。
这种方法基本不用,直接把两个字符串相加就好。
是的,你会发现,数组中也有concat()
方法,用于数组的连接。这个方法在数组中用得挺多的。
split():字符串转换为数组 【重要】
语法:
新的数组 = str.split(分隔符);
代码举例
//split()方法:字符串变数组
var str3 = '千古壹号|qianguyihao|许嵩';
console.log('结果1:' +str3.split()); // 无参数,表示:把整个字符串作为一个元素添加到数组中。
console.log(str3.split('')); // 参数为空字符串,则表示:分隔字符串中每一个字符,分别添加到数组中
console.log(str3.split('|')); // 参数为指定字符,表示:用 '|' 分隔字符串。此分隔符将不会出现在数组的任意一个元素中
console.log(str3.split('许')); // 同上
replace()
语法:
新的字符串 = str.replace(被替换的子串,新的子串);
代码举例:
//replace()方法:替换
var str2 = 'Today is fine day,today is fine day !';
console.log(str2);
console.log(str2.replace('today', 'tomorrow')); //只能替换第一个today
console.log(str2.replace(/today/gi, 'tomorrow')); //这里用到了正则,才能替换所有的today
repeat():重复字符串
语法
newStr = str.repeat(重复的次数);
举例:
const telephone = '13088889999';
const mix_telephone = telephone.slice(0, -4) + '*'.repeat(4); // 模糊电话号码的后四位
console.log(telephone); // 打印结果:13088889999
console.log(mix_telephone); // 打印结果:1308888****
trim()
trim()
:去除字符串前后的空白。
大小写转换
var str = 'abcdEFG';
//转换成小写
console.log(str.toLowerCase());
//转换成大写
console.log(str.toUpperCase());
经典例题
1.”smyhvaevaesmyh”查找字符串中所有 m 出现的位置。
var str2 = 'smyhvaevaesmyh';
for (var i = 0; i < str2.length; i++) {
//如果指定位置的符号=== "o"
//str2[i]
if (str2.charAt(i) === 'm') {
console.log(i);
}
}
练习 2:判断一个字符串中出现次数最多的字符,统计这个次数
var str2 = 'smyhvaevaesmyhvae';
//定义一个json,然后判断json中是够有该属性,如果有该属性,那么值+1;否则创建一个该属性,并赋值为1;
var json = {};
for (var i = 0; i < str2.length; i++) {
//判断:如果有该属性,那么值+1;否则创建一个该属性,并赋值为1;
var key = str2.charAt(i);
if (json[key] === undefined) {
json[key] = 1;
} else {
json[key] += 1;
}
}
console.log(json);
console.log('----------------');
//获取json中属性值最大的选项
var maxKey = '';
var maxValue = 0;
for (var k in json) {
// if(maxKey == ""){
// maxKey = k;
// maxValue = json[k];
// }else{
if (json[k] > maxValue) {
maxKey = k;
maxValue = json[k];
}
// }
}
console.log(maxKey);
console.log(maxValue);