用JS切换字母大小写

39 阅读1分钟

切换字母大小写

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

常见思路

  • 正则表达式
  • 通过ASCII码判断

代码

正则

function switchLetterCase(s: string): string{
  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.toLocaleLowerCase()
    } else {
      res += c;
    }
  }
  return res;
}

ASCII

function switchLetterCase2(s: string): string{
  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)

    if (code >= 65 && code <= 90) // 大写
    {
      res+=c.toLocaleLowerCase()
    } else if (code >= 97 && code <= 122) {
      res+=c.toUpperCase()
    } else {
      res += c;
    }
  }

  return res;
}

功能测试

// 功能测试
const str1 = '100aBcD$#xYz'
console.log(switchLetterCase(str1));
console.log(switchLetterCase2(str1))

结果:

image.png

性能测试

// 性能测试
const str1 = '100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz100aBcD$#xYz'
console.time('switchLetterCase-reg')
for (let i = 0; i < 10 * 10000; i++) {
  switchLetterCase(str1)
}
console.timeEnd('switchLetterCase-reg')
console.time('switchLetterCase-ascii')
for (let i = 0; i < 10 * 10000; i++) {
  switchLetterCase2(str1)
}
console.timeEnd('switchLetterCase-ascii')

结果

image.png

性能分析

  • 正则表达式性能较差
  • ascii码判断,性能较好 推荐答案

划重点

  • 慎用正则表达式
  • 常见字符的ascii码