【发布时间】:2011-06-01 05:34:35
【问题描述】:
这个问题很容易解释,所以 是否可以计算一个字母在as3中的字符串中包含多少次 并将值返回给某个变量
【问题讨论】:
标签: flash actionscript-3 string actionscript count
这个问题很容易解释,所以 是否可以计算一个字母在as3中的字符串中包含多少次 并将值返回给某个变量
【问题讨论】:
标签: flash actionscript-3 string actionscript count
我没有经常使用 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 脚本文件)
【讨论】:
确实如此。查看 ActionScript 参考:
【讨论】:
正则表达式的解决方案:
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;
}
【讨论】:
function patternOccurrences(pattern:String, target:String):uint
{
return target.match(new RegExp(pattern, "g")).length;
}
【讨论】:
另一种选择是在字符串上使用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
【讨论】:
这样一个简单任务的正则表达式在恕我直言是矫枉过正。这是最直接也最有效的方法:
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 作为读者练习:)
【讨论】:
这个比 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;
}
【讨论】: