字符串前言

在日常开发中,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);