首页 > 解决方案 > 在 Coderbytes Letter Changes 练习中处理数字和特殊字符时遇到问题

问题描述

您好,到目前为止,我还没有找到任何可以解决我遇到的问题的东西。在本练习中,唯一需要更改的是字母字符。但是,在测试用例中,它包括数字和特殊字符,它们也会更改,它们不应该更改。

我有以下代码:

function LetterChanges(str) { 

    let newTxt = ""; // stores string after changing each character to the next in the alphabet
    let newTxt2 = '';
    //iterate through the string
    for(let i=0;i<str.length;i++){

        switch(str[i]){
            case ' ':
                break;
            case 'z':
                newTxt = 'a';
                break;
            case 'Z':
                newTxt = 'A';
                break;

            default:
                newTxt = newTxt.concat(String.fromCharCode(str.charAt(i).charCodeAt(0) + 1));
                break;
        }

        //uppercase vowels
        switch(newTxt.charAt(i)){
            case 'a': case 'e': case 'i': case 'o': case 'u':
                newTxt2 += newTxt.charAt(i);
                break;
            default:
                newTxt2 += newTxt.charAt(i);
                break;

        }
    }
    str = newTxt;

    return str; 

}

如果当前字符等于特殊字符或使用正则表达式的数字,我可以使用 if/else 或嵌套开关的默认设置,只需将字符添加回来而不更改,如果它没有更改?

我还是 Javascript 的新手。我已经在 Google 上搜索了一个多小时。

谢谢

标签: javascript

解决方案


经过几个小时的研究并尝试了不同的方法,我终于找到了解决方案:

const LetterChanges = str => {
   let newTxt = str.replace(/[a-z]/gi, function(c){
       switch(c){
           case 'z': return 'a';
           case 'Z': return 'A';
           default: return String.fromCharCode(1+c.charCodeAt(0));
       }
   });
   return newTxt.replace(/[aeiou]+/g, function(vowel){
        return vowel.toUpperCase();
   });



}

谢谢


推荐阅读