字符串对象案例:返回字符位置,统计最多字符,替换字符
基本包装类型
就是将str从简单的类型包装成复杂的类型,这样就有了方法和属性
过程:
// 1. 生成临时变量,把简单类型包装为复杂数据类型
var temp = new String('andy');
// 2. 赋值给我们声明的字符变量
str = temp;
// 3. 销毁临时变量
temp = null;
字符串不可变
指的是里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间。
var str = 'abc';
str = 'hello';
// 当重新给 str 赋值的时候,常量'abc'不会被修改,依然在内存中
// 重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变
// 由于字符串的不可变,在大量拼接字符串的时候会有效率问题
var str = '';
for (var i = 0; i < 100000; i++) {
str += i;
}
console.log(str); // 这个结果需要花费大量时间来显示,因为需要不断的开辟新的空间
根据字符返回位置
var str="qwertyuqwe"
console.log(str.indexOf("e",3))//从下标为3开始查找
案例:返回字符位置
查找字符串"abcoefoxyozzopp"中所有o出现的位置以及次数
① 核心算法:先查找第一个o出现的位置
② 然后 只要indexOf 返回的结果不是 -1 就继续往后查找
③ 因为indexOf 只能查找到第一个,所以后面的查找,利用第二个参数,当前索引加1,从而继续查找
var str="abcoefoxyozzopp";
var index=str.indexOf('o')
var num=0
while(index!==-1){
console.log(index);
num++;
index=str.indexOf('o',index+1)
}
console.log('o出现了次数是'+num)
课后作业['red','blue','red','green','pink','red'],求red出现的次数
var arr=['red','blue','red','green','pink','red']
var index=arr.indexOf('red')
while(index!==-1){
console.log(index);
index=arr.indexOf('red',index+1)
}
根据位置返回字符(重点)
str[index] H5新增的
var str="asdfsg";
console.log(str[3]);
案例:返回字符位置 判断一个字符串 'abcoefoxyozzopp' 中出现次数最多的字符,并统计其次数。
① 核心算法:利用 charAt() 遍历这个字符串
② 把每个字符都存储给对象, 如果对象没有该属性,就为1,如果存在了就 +1
③ 遍历对象,得到最大值和该字符
把每个字符都存储给对象, 如果对象没有该属性,就为1,如果存在了就 +1 这一步用代码实现为
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[chars]++
}else{
o[chars]=1;
}
}
2.遍历对象
var max=0;
var ch=';'
for (let k in o) {
// k得到的是属性名
// o[k]得到的属性值
if(o[k]>max){
max=o[k]
ch=k
}
}
console.log(max)
console.log('最多的字符是'+ch)
完整代码
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[chars]++
}else{
o[chars]=1;
}
}
// 2.遍历对象
var max=0;
var ch=';'
for (let k in o) {
// k得到的是属性名
// o[k]得到的属性值
if(o[k]>max){
max=o[k]
ch=k
}
}
console.log(max)
console.log('最多的字符是'+ch)
拼接以及截取字符串
substr('截取的起始位置:','截取几个字符')
var str1='改革春风吹满低';
console.log(str1.substr(2,2));//第一个2为索引号,第二个2为截取的字符 春风
替换字符串以及转换数组
1.替换字符replace('被替换的字符','替换为的字符')
2.字符转发为数组 split('分隔符')
案例:有一个字符串 'abcoefoxyozzopp'要求把里面所有的o替换为*
var str='abcoefoxyozzopp'
while(str.indexOf('o')!==-1){
str=str.replace('o','*');
}
console.log(str)
var str2='red,pink,blue'
console.log(str.split(','));
给定一个字符串,如:“abaasdffggghhjjkkgfddsssss3444343”,问题如下:
1、 字符串的长度
2、 取出指定位置的字符,如:0,3,5,9等
3、 查找指定字符是否在以上字符串中存在,如:i,c ,b等
4、 替换指定的字符,如:g替换为22,ss替换为b等操作方法
5、 截取指定开始位置到结束位置的字符串,如:取得1-5的字符串
6、 找出以上字符串中出现次数最多的字符和出现的次数
7、 遍历字符串,并将遍历出的字符两头添加符号“@‘’
// 7、 遍历字符串,并将遍历出的字符两头添加符号“@‘’
var str="abaasdffggghhjjkkgfddsssss3444343";
console.log("字符串长度为"+str.length)
console.log(str[0]+str[3]+str[5]+str[9])
var arr=['i','c','b']
for(var i=0;i<arr.length;i++){
var str1=str.indexOf(arr[i])
if (str1!==1){
console.log('不存在')
}else{
console.log('存在')
}
}
while(str.indexOf('g')!==-1){
str=str.replace('g','22')
}
console.log(str)
while(str.indexOf('ss')!==-1){
str=str.replace('ss','b')
}
console.log(str)
console.log(str.substr(1,5))
console.log(str)
var o={}
console.log(str)
for (var i = 0; i < str.length; i++) {
var chars=str.charAt(i)
if(o[chars]){
o[chars]++;
}else{
o[chars]=1
}
}
var max=0;
var ch='';
for (let k in o) {
if(o[k]>max){
max=o[k]
ch=k
}
}
console.log('出现次数最多的字符'+ch+'和出现的次数'+max)
var new_str=""
for (str1 in str){
new_str+="@"+str1+"@"
}
console.log(new_str)