Подсчитайте, сколько раз письмо содержится в строке - PullRequest
2 голосов
/ 29 декабря 2010

Вопрос довольно понятен, поэтому можно подсчитать, сколько раз буква содержится в строке в as3, и вернуть значение некоторой переменной

Ответы [ 7 ]

8 голосов
/ 30 декабря 2010
function patternOccurrences(pattern:String, target:String):uint
    {
    return target.match(new RegExp(pattern, "g")).length;
    }
4 голосов
/ 01 февраля 2013

Другой вариант - использовать 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
3 голосов
/ 29 декабря 2010

Конечно, это так.Посмотрите ссылку на ActionScript для:

String , string.length и string.charAt ()

3 голосов
/ 29 декабря 2010

Я не очень много работал с 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 голосов
/ 29 декабря 2010

Решение с RegExp:

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;
}
1 голос
/ 01 апреля 2015

Этот в 20 раз быстрее, чем reg-exp

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;
}   
1 голос
/ 20 июля 2014

регулярные выражения для такой простой задачи, IMHO, излишни.Вот самый простой и очень эффективный способ:

    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"]();

Замена RemoveLastChar на CountSingleLetter, оставленное в качестве упражнения для читателя:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...