字符串相关面试题

我变秃了,也变强了

最简单的字符串反转

如果考虑unicode问题的话,用for of 遍历
实现思路:使用for of遍历字符串,并添加到新字符串头部 ()

    let str='abcdefghijklmnopqrst😘'
    let newStr='';
    let newStr2=str.split('').reverse().join('');
    
    for(let i of str){    //可以解决32位utf-16字符的反转问题
      newStr=i+newStr       
    }
    console.log(newStr);  //反转成功 ,表情字符也反转成功
    console.log(newStr2);  //反转成功

计算某一个字符在字符串在出现的次数

实现思路 :使用for循环遍历字符串,生成一个num变量,每个重复的字符都会使其增加1
let str='hello everyone';
let s='e'
function catStr(str,s){
    ler num=0;

    for(var i=0,len=str.length;i<len;i++){

        if(str[i]==s){

            num++

        }

    }

return num

}

catStr(str)

//for是最省性能的

计算字符串中出现的最多次数的字符和数量

实现思路 : 生成一个对象,它的key为每个不重复的字符;默认值为1,重复的字符值增加1
    let str = 'asfkshfkhsagdadgawassadas';

    function getMax(str){
      let obj={}    //新建对象用来接收字符作为key值
      for(let i=0;i<str.length;i++){
        let n=str.charAt(i)
        if(obj[n]){   //每个字符对应一个key值,不存在该值的时候该值=1,存在重复时增加1
          obj[n]++
        }else{
          obj[n]=1
        }
      }
      //return obj   //这一步完成后obj获取了所有的字符的数量
      let maxStr=''
      let maxNum=0    //生成两个空值用来接收
      for(let i in obj){
        if(obj[i]>maxNum){    //进行对比,找到出现次数最多的字符
          maxNum=obj[i]     
          maxStr=i
        }
      }
      console.log('出现次数最多的字符是:'+maxStr);
      console.log('出现的次数为:'+maxNum)
    }

字符串中正则检索

        var str = 'world world world 123 456 7a8b';

        // 传入字符串
        var val = str.match('world');
        console.log(val);
        // ["world", index: 0, input: "world world world1", groups: undefined]
        // 返回一个数组,其中存放了与它找到的匹配文本有关的信息。
        //该数组的第 0 个元素存放的是匹配文本,而其余的元素存放的是与正则表达式的子表达式匹配的文本。
        // 除了这些常规的数组元素之外,返回的数组还含有两个对象属性。
        // index 属性声明的是匹配文本的起始字符在 stringObject 中的位置,input 属性声明的是对 stringObject 的引用。

        // 传入正则表达式 g代表全局,不加只取第一个 加上i代表不区分大小写
        // 数字检索/^\d{1,}$/ || /\d+/ 
        console.log(str.match(/\d+/)); // ["123", index: 18, input: "world world world 123 456 7a8b", groups: undefined]
        console.log(str.match(/\d+/g)); // ["123", "456", "7", "8"]

               // 字母检索
        console.log(str.match(/[a-zA-Z]+/ig)); // 所有字母

        // 替换
        // 传入字符
        console.log(str.replace('w', 'W')); // World world world 123 456 7a8b 第一个字母替换
        console.log(str.replaceAll('w', 'W')); // World World World 123 456 7a8b 所有字母替换
        // 传入正则
        console.log(str.replace(/\d+/, "X")); // world world world X 456 7a8b 替换第一个数字
        console.log(str.replace(/\d+/g, "X")); // world world world X X XaXb 替换所有数字
        console.log(str.replace(/\d+/g, "<span>$&</span>")); // world world world <span>123</span> <span>456</span> <span>7</span>a<span>8</span>b 替换所有数字,$&代表被替换的当前的值
        console.log(str.replace(/[a-zA-Z]+/ig, "<span>$&</span>")) // <span>world</span> <span>world</span> <span>world</span> 123 456 7<span>a</span>8<span>b</span>

        // 案例 所有数字标蓝
        function formatNumber(msg) {
            var str = msg.replace(/\d+/g, "<span style='color:#409EFF;'>$&</span>");
            return str;
        }
        document.body.innerHTML = formatNumber('world world world 123 456 7a8b');

简单的将 a-b 类型命名 转为驼峰语法命名

const camelizeRE = /-(\w)/g
export const camelize = cached((str: string): string => {
  return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')
})
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值