问题很明确,是否可能在AS3中计算字符串中某个字母出现的次数并将该值返回给某个变量。
function patternOccurrences(pattern:String, target:String):uint
{
return target.match(new RegExp(pattern, "g")).length;
}
split()
,并返回它的长度减1。对于基本需求,我发现这比使用 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
我对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 脚本文件)
一个使用正则表达式的解决方案:
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;
}
这个比正则表达式快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;
}
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;
}
String.prototype.RemoveLastChar = function():String
{
return this.substr(0, this.length - 1);
}
调用原型版本很不幸不是您所期望的:
line = line["RemoveLastChar"]();