【问题标题】:Count how many times a letter is contained inside a string计算一个字母包含在一个字符串中的次数
【发布时间】:2011-06-01 05:34:35
【问题描述】:

这个问题很容易解释,所以 是否可以计算一个字母在as3中的字符串中包含多少次 并将值返回给某个变量

【问题讨论】:

    标签: flash actionscript-3 string actionscript count


    【解决方案1】:

    我没有经常使用 Actionscript 或 Flash - 快速谷歌搜索结果:

    function getEntranceNumber(mytext:String,myletter:String):Number
        {
            if( myletter.length>1)
            {
                trace("length of a letter should be equal to 1");
                return 0;
            }
            else
            {
                var total:Number = 0;
                var i:Number;
                for( i=0 ; i<mytext.length ; i++ )
                {
                    if( mytext[i]==myletter[0] )
                        total++;
                }
                return total;
            }
        }
    

    来源:http://www.actionscript.org/forums/showthread.php3?t=145412

    编辑:这是另一个链接,其中包含有关同一主题的一些附加信息:

    http://www.kirupa.com/forum/showthread.php?t=94654(我相信它甚至包含一个 .fla 脚本文件)

    【讨论】:

      【解决方案2】:

      确实如此。查看 ActionScript 参考:

      String, string.length,和 string.charAt()

      【讨论】:

      • 是的,这很明显,我一开始就想到了,但我想是否有某种方法可以在不循环遍历字符串中的所有字符的情况下做到这一点。看起来没有,但是这对我有用 var strCount:uint = str.indexOf(String(find.text)); for (var k:Number = 0; k
      【解决方案3】:

      正则表达式的解决方案:

      trace(count("abcdefg", "a"));//1
      trace(count("aacdefg", "a"));//2
      trace(count("aacdeAg", "a"));//2
      trace(count("aacdeaa", "a"));//4
      trace(count("aacdeaa", "e"));//1
      trace(count("eacdeae", "e"));//3
      trace(count("eacdeae", "z"));//0
      function count(s : String, letter : String) : int {
          return s.match(new RegExp(letter,"g")).length;
      }
      

      【讨论】:

      • 感谢您的回答,这看起来像一个解决方案会尝试这个
      【解决方案4】:
      function patternOccurrences(pattern:String, target:String):uint
          {
          return target.match(new RegExp(pattern, "g")).length;
          }
      

      【讨论】:

      【解决方案5】:

      另一种选择是在字符串上使用split() 并返回其长度减一。我发现它比 RegExp 更容易满足基本需求。

      例子:

      function getMatchCount(search:String, target:String):int {
          return target.split(search).length - 1;
      }
      
      trace( getMatchCount('a', 'aardvark') ); // 3
      trace( getMatchCount('ball', 'volleyball baseball basketball football') ); // 4
      

      【讨论】:

      • 这种方法的缺点是在搜索字符串的开头或结尾搜索空白字符将无法计数。
      【解决方案6】:

      这样一个简单任务的正则表达式在恕我直言是矫枉过正。这是最直接也最有效的方法:

          static public function CountSingleLetter( where : String, what : String ):int
          {
              var count:uint = 0;
              for (var k:Number = 0; k < where.length; ++k )
              {
                  if (where.charAt(k) == what )
                  {
                      ++count;
                  }
              }
              return count;
          }
      

      把它放到一些 Utils 类中,或者放到 String.prototype 中,即。

      String.prototype.RemoveLastChar = function():String
      {
          return this.substr(0, this.length - 1);
      }
      

      不幸的是,调用原型版本不是您所期望的:

      line = line["RemoveLastChar"]();
      

      用 CountSingleLetter 替换 RemoveLastChar 作为读者练习:)

      【讨论】:

        【解决方案7】:

        这个比 reg-exp 快 20 倍

        function count(pattern:String, target:String) : uint {
            var count:uint=0;
            var index:int = -1;
            while((index = target.indexOf(pattern, index+1)) >= 0){
                count++;
            }
            return count;
        }   
        

        【讨论】:

          猜你喜欢
          • 2019-12-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-13
          • 1970-01-01
          • 2023-03-22
          • 2019-11-03
          • 2017-07-18
          相关资源
          最近更新 更多