第101题 切换字母大小写

  • 输入一个字符串,切换其中字母的大小写
  • 如,输入字符串12aBc34,输出字符串12AbC34

思路分析

  • 正则表达式
  • 通过ASCII码判断('AB'.charCodeAt(0)

切换字母大小写(正则表达式)

    /**
     * 切换字母大小写(正则表达式)
     * @param s str
     */
    function switchLetterCase1(s) {
      let res = ''
    
      const length = s.length
      if (length === 0) return res
    
      const reg1 = /[a-z]/
      const reg2 = /[A-Z]/
    
      for (let i = 0; i < length; i++) {
        const c = s[i]
        if (reg1.test(c)) { // 小写字母转大写
          res += c.toUpperCase()
        } else if (reg2.test(c)) { // 大写字母转小写
          res += c.toLowerCase()
        } else {// 非字母
          res += c
        }
      }
    
      return res
    }

切换字母大小写(ASCII 编码)

    /**
     * 切换字母大小写(ASCII 编码)
     * @param s str
     */
    function switchLetterCase2(s) {
      let res = ''
    
      const length = s.length
      if (length === 0) return res
    
      for (let i = 0; i < length; i++) {
        const c = s[i]
        const code = c.charCodeAt(0) // 获取字符的ASCII编码
        // 或者 code = s.charCodeAt(i)
    
        // ascii.911cha.com 查询
        // 65-90 A-Z 
        // 97-122 a-z
        if (code >= 65 && code <= 90) { // 大写字母转小写
          res += c.toLowerCase()
        } else if (code >= 97 && code <= 122) { // 小写字母转大写
          res += c.toUpperCase()
        } else {// 非字母
          res += c
        }
      }
    
      return res
    }
    // 功能测试
    const str = '100aBcD$#xYz'
    console.info(switchLetterCase2(str))
    // 性能测试
    
    const str = '100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz'
    
    // 切换字母大小写(正则表达式)
    console.time('switchLetterCase1')
    for (let i = 0; i < 10 * 10000; i++) {
      switchLetterCase1(str)
    }
    console.timeEnd('switchLetterCase1') // 436ms
    
    // 切换字母大小写(ASCII 编码)
    console.time('switchLetterCase2')
    for (let i = 0; i < 10 * 10000; i++) {
      switchLetterCase2(str)
    }
    console.timeEnd('switchLetterCase2') // 210ms
Last Updated:
Contributors: leeguooooo