计算复杂字符串中关键字数量的其他方法

时间:2012-12-21 23:54:47

标签: actionscript-3 flash actionscript

我正在阅读一个文件,其中包含大约1200个单词,格式如下:

  

词:一个:/ zenb:/ fixx:/ WEW:/新浪:/ BENB:/ sixx:/ HEW:/ bin中

我需要找到该文本文件中有多少关键字,关键字是指:

  

zen修复我们罪恶他六个人

现在我正在尝试使用RegExp这样做:

var s:String = "words:b:sa:/zenb:/fixx:/wew:/sina:/benb:/sixx:/hew:/bin";
var pattern:RegExp = /:/+/g;
var results:Array = s.match(pattern);
trace(results.length); 

它产生错误,因为我是初学者,我真的不明白这个RegExp是如何工作的,有没有其他方法可以得到相同的结果?

由于

2 个答案:

答案 0 :(得分:2)

您的var pattern:RegExp = /:/+/g;语法有误,您跳过反斜杠\将其更改为:

var pattern:RegExp = /:\/+/g;

它应该可以工作,或者使用这种格式,你可以使用String split方法来获得总字数。试试这个:

var s:String = "words:b:sa:/zenb:/fixx:/wew:/sina:/benb:/sixx:/hew:/bin";
var wordCount:Number = s.split(":/").length -1;
trace( wordCount );

希望有效。

答案 1 :(得分:0)

package
{
    import flash.display.Sprite;

    public class CountWordsExample extends Sprite
    {
        public function CountWordsExample()
        {
            super();
            // 8 7 0
            trace(countWords(
                "words:b:sa:/zenb:/fixx:/wew:/sina:/benb:/sixx:/hew:/bin",
                ":/"),
                countWords(
                    "words:b:sa:/:/fixx:/wew:/sina:/benb:/sixx:/hew:/bin",
                    ":/"),
                countWords(
                    "words:b:sa::zenb::fixx::wew::sina::benb::sixx::hew::bin",
                    ":/"));
        }

        public static function countWords(words:String, delimiter:String, 
                                          countBlanks:Boolean = false):uint
        {
            var result:uint;
            var wordPointer:int = -1;
            var delimiterPointer:int;
            var delimiterLength:uint = delimiter.length;

            if (words.length >= delimiterLength)
            {
                do
                {
                    delimiterPointer = wordPointer;
                    wordPointer = words.indexOf(
                        delimiter, wordPointer + delimiterLength);
                    if (countBlanks || 
                        // we moved by more characters, then the length of
                        // delimiter
                        wordPointer - delimiterLength > delimiterPointer) 
                        result++;
                }
                while (wordPointer > -1)
            }
            return result;
        }
    }
}

这是一个如何计算单词而不创建原始字符串的附加数组或子字符串的示例。它还验证计算的单词至少有一个字符长度。