切换字母大小写
- 输入一个字符串,切换其中字母的大小写
- 如,输入字符串12aBc34,输出字符串12AbC34
常见思路
代码
正则
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
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
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))
结果:

性能测试
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')
结果

性能分析
- 正则表达式性能较差
- ascii码判断,性能较好 推荐答案
划重点