字符串对象方法:
indexOf():
语法:str.indexOf(searchValue [, fromIndex])
indexOf()
方法返回调用它的String
对象中第一次出现的指定值的索引,从fromIndex
处进行搜索。如果未找到该值,则返回 -1。
习题:查找字符串"abcoefoxyozopp"中所有o出现的位置以及次数
//查找字符串某个字符出现的次数
//查找字符串"abcoefoxyozopp"中所有o出现的位置以及次数
//核心算法:先查找出第一个o的位置
//然后 只要 indexOf 返回的结果不是-1就继续往后找
//因为indexOf 只能查找到第一个,所以后面的查找,一定是当前索引加1,从而继续查找
//语法:str.indexOf(searchValue [, fromIndex])
var str = "abcoefoxyozopp";
var index = str.indexOf("o");
var num = 0;
//console.log(index);//3
while (index != -1) {//如果未找到该值,则返回 -1。
console.log(index);//如果不是-1,则匹配到了o,打印出下标
num++;//记录次数+1
index = str.indexOf("o", index + 1);//从index+1开始搜索
}
console.log("o出现的次数:" + num);
//3,6,9,11
反思:["red","blue","red","green","pink","red"],求red出现的位置和次数
//课后作业:["red","blue","red","green","pink","red"],求red出现的位置和次数
var arr = ["red", "blue", "red", "green", "pink", "red"];
var index = arr.indexOf("red");
var num = 0;
// console.log(index);//0
while (index != -1) {
console.log(index);
num++;
index = arr.indexOf("red", index + 1); //0,2,5
}
console.log("o出现的次数是:" + num); //3
根据位置返回字符(重点)
方法名 | 说明 | 使用 |
charAt(index) | 返回指定位置的字符 | str.charAt(index) |
charCodeAt(index) | 获取指定位置的字符的ASCII码 | str.charCodeAt(index) |
str[index] | 获取指定位置处字符 | HTML5,IE8+支持和charAt()等效 |
例题:
//根据位置返回字符
//1、charAt(index)根据位置返回字符
var str = "andykjk";
console.log(str.charAt(3)); //语法:str.charAt(index)
//y
//因此我们可以用for循环遍历字符串所有字符
for (var i = 0; i < str.length; i++) {
console.log(str.charAt(i));
}
//2、charCodeAt(index)获取指定位置的字符的ASCII码,目的判断用户按下了键盘的哪个键
console.log(str.charCodeAt(0)); //97
//3、str[index]H5新增的
console.log(str[0]); //a
知识点补充:
//补充知识点
//有一个对象,对象调用属性的方法:对象["属性名"],来判断是否有该属性
var o = {
age: 18
}
if (o["sex"]) {
console.log("里面有该属性");
} else {
console.log("里面无该属性");//输出
}
例题扩展:判断一个字符串"abcoefoxyozzopp"中出现最多的字符并统计其次数
//判断一个字符串"abcoefoxyozzopp"中出现最多的字符并统计其次数
//核心算法:利用chatAt()遍历整个字符串
//把每个字符都存储给对象,如果对象没有该属性,就为1,如果已经存在就加1
//遍历对象,得到最大值和该字符
//o.a=1
//o.b=1
//o.c=1
//o.o=4
var str = "abcoefoxyozzopp";
var o = {}; //声明对象
for (var i = 0; i < str.length; i++) {
var chars = str.charAt(i); //chars是字符串的每一个字符,存储到变量中
if (o[chars]) { //o[chars]得到的是属性值,第一次o["a"],chars="a","b","c".....
o[chars]++;
} else {
o[chars] = 1;
}
}
console.log(o); //Object { a: 1, b: 1, c: 1, o: 4, e: 1, f: 1, x: 1, y: 1, z: 2, p: 2 }
//遍历对象for in
var max = 0;
var ch = "";
for (var k in o) { //k得到的是属性名,o[k]得到的是属性值
if (o[k] > max) {
max = o[k];
ch = k;
}
}
console.log(max);//4
console.log("最多的字符是" + ch);//最多的字符是o
字符串操作方法
方法名 | 说明 |
concat(str1,str2,str3...) | concat()方法用于连接俩个或多个字符串。拼接字符串,等效于+,+更常用 |
substr(start,length) | 从start开始(索引号),length为取得个数 |
slice(start,end) | 从start开始,截取到end位置,end取不到(都为索引号) |
substring(start,end) | 从start开始(索引号),截取到end位置,end取不到,基本和slice一致,但不接受负值 |
个人理解:
slice(start,end)当end为负值时从后面开始匹配字符、substring(start,end)当end为负值时会被当作 0
详细文档我已附上链接!
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/slice
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/substring
//字符串操作方法
//1.concat("","","")
var str = "kjk";
console.log(str.concat("是个帅锅")); //kjk是个帅锅
//2.substr(start,length) start 起始位置 length 截取几个字符
var str1 = "kjk是个帅锅";
console.log(str1.substr(2, 5)); //k是个帅锅
//第一个2是从索引号2开始,5是取5个
//3.slice(start,end) start 起始位置 end 结束位置 不包含结束位置
var str2 = "kjk是个帅锅";
console.log(str2.slice(2, 5)); //k是个
console.log(str2.slice(2, -1)); //k是个帅
//4.substring(start,end) start 起始位置 end 结束位置 不包含结束位置 但end不能为负值
var str3 = "kjk是个帅锅";
console.log(str3.substring(2, 5)); //k是个
console.log(str3.substring(2, -1)); //kj 负值或NaN被当做0,start>end时,交换位置,也就是0,2
字符串操作方法扩展:
1.替换字符 replace("被替换的字符","替换的字符") 只会替代1个字符
//1.替换字符 replace("被替换的字符","替换的字符") 只会替代1个字符
var str = "kjkplmm";
console.log(str.replace("k", "a"));//ajkplmm只会替代第一个k
//有一个字符串"abcoefoxyozzopp",要求把里面所有的o替换为*
var str1 = "abcoefoxyozzopp";
while (str1.indexOf("o") !== -1) { //未找到o则返回-1
str1 = str1.replace("o", "*");
}
console.log(str1); //abc*ef*xy*zz*pp
2.字符转换为数组 split("分隔符") 前面学过join将数组转换为字符串
//2.字符转换为数组 split("分隔符") 前面学过join将数组转换为字符串
var str2 = "red,green,black,yellow,pink,purple"
console.log(str2.split(","));
var str2 = "red*green*black*yellow*pink*purple"
console.log(str2.split("*"));
//Array(6) [ "red", "green", "black", "yellow", "pink", "purple" ]
3.大小写转换 toUpperCase()、toLowerCase()
//3.大小写转换 toUpperCase()、toLowerCase()
console.log('alphabet'.toUpperCase()); // 'ALPHABET'
console.log('中文简体 zh-CN || zh-Hans'.toLowerCase());
// 中文简体 zh-cn || zh-hans
console.log("ALPHABET".toLowerCase());
// "alphabet"
出自于听pink老师的视频知识点总结
最终习题:
给定一个字符串,"abaacdffggghhjjkkgfddsssss3444343",问:
1.字符串的长度
2.取出指定位置的字符,如"0,3,5,9"等
3.查找指定字符是否在以上字符串中存在,如:i,c,b等
4.替代指定字符,如g替代为22,ss替代为b等
5.截取指定开始位置到结束位置的字符串,如:取得1-5的字符串
6.找出以上字符串中出现最多的字符以及出现的次数
//1.字符串的长度
var str = "abaacdffggghhjjkkgfddsssss3444343";
console.log(str.length); //33
//2.取出指定位置的字符,如"0,3,5,9"等
var str1 = "abaacdffggghhjjkkgfddsssss3444343";
console.log(str1.charAt(0)); //a
console.log(str1.charAt(3)); //a
console.log(str1.charAt(5)); //d
console.log(str1.charAt(9)); //g
// 3.查找指定字符是否在以上字符串中存在,如:i,c,b等
var str2 = "abaacdffggghhjjkkgfddsssss3444343";
console.log(str2.indexOf("i")); //-1(未找到返回-1)
console.log(str2.indexOf("c")); //4
console.log(str2.indexOf("b")); //1
// 4.替代指定字符,如g替代为22,ss替代为b等
var str3 = "abaacdffggghhjjkkgfddsssss3444343";
while (str3.indexOf("g") !== -1 || str3.indexOf("ss", "b") !== -1) {
str3 = str3.replace("g", "22");
str3 = str3.replace("ss", "b");
}
console.log(str3); //abaacdff2222ghhjjkkgfddbbs3444343
// 5.截取指定开始位置到结束位置的字符串,如:取得1-5的字符串
var str4 = "abaacdffggghhjjkkgfddsssss3444343";
console.log(str4.slice(1, 5)); //baac
console.log(str4.substring(1, 5)); //baac
// 6.找出以上字符串中出现最多的字符以及出现的次数
var str5 = "abaacdffggghhjjkkgfddsssss3444343";
var o = {}; //声明一个对象
var max = 0;
var ch = "";
for (var i = 0; i < str5.length; i++) {
var chars = str5.charAt(i);
if (o[chars]) {
o[chars]++;
} else {
o[chars] = 1;
}
}
//console.log(o);
//Object { 3: 3, 4: 4, a: 3, b: 1, c: 1, d: 3, f: 3, g: 4, h: 2, j: 2, … }
for (var k in o) { //k得到的是属性名,o[k]得到的是属性值
if (o[k] > max) {
max = o[k];
ch = k;
}
}
//console.log(max);//5
console.log("出现次数最多的字符是:" + ch);
//出现次数最多的字符是:s