【问题标题】:Finding uppercase characters within a string在字符串中查找大写字符
【发布时间】:2011-05-19 07:21:16
【问题描述】:

我正在尝试编写一个函数来解密具有大写字母(显示其新单词)和小写字符(即单词本身)的加密消息。该函数需要在加密消息中搜索所有大写字母,然后返回大写字符及其后面的小写字母。我被赋予了一个在解密函数中调用的函数:

function isUpperCase(aCharacter)    
{    
    return (aCharacter >= 'A') && (aCharacter <= 'Z');
}

我在想我会先在单词中搜索所有大写字符并将其分配为新字符串。然后我可以执行 while 循环,它将拾取新字符串中的每个字母,然后在旧字符串中搜索它旁边的小写字符。

但是,我完全卡在第一部分 - 我什至无法解决结构化的英语。

代码是:

  • encryptMessage 是一个包含大小写字符的字符串
  • indexCharacter 稍后用于其他功能
  • upperAlphabet - 大写字母 - 稍后使用
  • lowerAlphabet - 小写字母 - 稍后使用

功能:

function decryptMessage(encryptMessage, indexCharacter, upperAlphabet, lowerAlphabet)
{
    var letter
    var word = "";

    for (var count = 0; count < encryptMessage.length; count = count +1);
    {
        letter = encryptMessage.charAt(count) 
        if (isUpperCase(letter));
        { 
            word = word + letter;       
        }
        document.write(word); //this is just to test to see if it returns the uppercase - I would use the return word
    }

上面的代码似乎不起作用,所以我什至无法继续使用其余代码。任何人都可以帮我确定我哪里出错了 - 无论如何我是否完全走错了方向,读回来我认为这真的没有多大意义?它是一个非常基本的代码,我只学习了 for,while 循环 - if 和 else 功能真的很强大,我只是被卡住了。

提前感谢您的建议 :-)

伊西

【问题讨论】:

    标签: javascript string


    【解决方案1】:

    我不太确定我是否遵循,但您可以使用替换方法和正则表达式进行剥离

    var str = 'MaEfSdsfSsdfsAdfssdGsdfEsdf';
    var newmsg = str.replace(/[a-z]/g, '');
    var old = str.replace(/[A-Z]/g, '');
    

    在这种情况下,newmsg = 'MESSAGE'。

    【讨论】:

    • 感谢您的助手,我学到的代码非常基础,for/while 循环、if/else、charAt 和 indexOf - 我知道它非常基础,但我无法解决。我有完整的 Html 文档,它会更有意义,但我不能在这里发布它
    【解决方案2】:

    检查字符串中大写字符的简单条件是...

    var str = 'aBcDeFgHiJkLmN';
    var sL = str.length;
    var i = 0;
    for (; i < sL; i++) {
        if (str.charAt(i) === str.charAt(i).toUpperCase()) {
            console.log('uppercase:',str.charAt(i));
        }
    }
    
    /*
        uppercase: B
        uppercase: D
        uppercase: F
        uppercase: H
        uppercase: J
        uppercase: L
        uppercase: N
    */
    

    【讨论】:

      【解决方案3】:

      编辑

      String input = "ThisIsASecretText";    
      
      for(int i = 0; i < input.Length; i++)
      {
        if(isUpperCase(input.charAt(i))
        {
           String nextWord = String.Empty;
      
           for(int j = i; j < input.Length && !isUpperCase(input.charAt(j)); j++)
           {
             nextWord += input.charAt(j);
             i++;
           }
      
           CallSomeFunctionWithTheNextWord(nextWord);
        }
      }
      

      将进行以下调用:

      • CallSomeFunctionWithTheNextWord("This");
      • CallSomeFunctionWithTheNextWord("Is");
      • CallSomeFunctionWithTheNextWord("A");
      • CallSomeFunctionWithTheNextWord("Secret");
      • CallSomeFunctionWithTheNextWord("Text");

      您可以使用正则表达式用更少的代码做同样的事情,但是由于您说您正在学习非常基础的编程课程,因此这种解决方案可能更合适。

      【讨论】:

      • 您好,感谢您的帮助。它是我想做的。基本上它会搜索第一个大写字符,然后返回它旁边的小写字符——这部分字符串然后将进入另一个函数,将字母与另一个字母匹配(我已经完成的那部分函数)。然后它会回到原始消息,找到下一个大写字符并返回大写字母和旁边的小写字母,然后进入函数等等。
      • 因此,如果我有一个消息字符串,例如 KlptonPuuvTssi,它将返回 Klpton,然后将其用于调用另一个函数,然后它将返回 Puuv,然后是 Tssi。我正在做的课程非常基础——我们还没有学过toLower之类的东西。我们所讨论的只是 for/while 循环、charAt、indexOf、if 和 else :-)
      • 好的,现在我得到了你想要做的。我会尽快编辑我的答案。
      • 如果这是您要查找的内容,请将我的回答标记为对您问题的回答。谢谢! :)
      • 你有长度而不是长度,它甚至不是有效的代码。
      【解决方案4】:

      使用Unicode property escapes,尤其是匹配大写的“Lu”General Property Category。有数字、标点符号、货币以及您可能感兴趣的任何其他字符类别的类别。

      在下面的示例中,“u”修饰符启用 Unicode 匹配。

      "HeLlo WoRld".match(/\p{Lu}/gu) // [ 'H', 'L', 'W', 'R' ]
      

      【讨论】:

        【解决方案5】:

        我宁愿使用 Array.reduce 如下: 比如说,示例 sample = 'SampleStringAsFollows';

        let capWord = [...sample].reduce((caps,char) => (char.match(/[A-Z]/)) ? caps + char : caps,'');
        
        console.log(capWord); //SSAF
        

        capWord 将是一个 CAPITAL CHARACTERS 字符串,并且还将处理字符串中可能包含特殊字符的边界情况。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-03-20
          • 1970-01-01
          相关资源
          最近更新 更多