我一直在试图将我的头围绕这一段时间,但一直未能拿出一个优雅的解决方案。在字符串中获得大多数字符的字符
问题:我有一个字符串与不同的字符(“ABDDEEDDC”),我需要知道哪个字符发生最多。任何帮助将不胜感激。
干杯,Niko
我一直在试图将我的头围绕这一段时间,但一直未能拿出一个优雅的解决方案。在字符串中获得大多数字符的字符
问题:我有一个字符串与不同的字符(“ABDDEEDDC”),我需要知道哪个字符发生最多。任何帮助将不胜感激。
干杯,Niko
我不知道任何内置支持它,但你可以使用字符串的charAt()
属性,关联数组做到以下几点:
var charCounter:Object = new Object();
var str:String = "ABDDEEDDC";
var maxCount:int = 0;
var maxChar:String = "";
for(var i = 0; i < str.length; i++) {
// Must make sure the associate array is initialised!
if(charCounter.hasOwnProperty(str.charAt(i)) {
charCounter[str.charAt(i)]++;
} else {
charCounter[str.charAt(i)] = 1;
}
if(charCounter[str.charAt(i)] > maxCount) {
maxCount = charCounter[str.charAt(i)];
maxChar = str.charAt(i);
}
}
在这个角色应该结束在maxChar中,以及它出现在maxCount中的次数。
(旁注:我相信不是charCounter.hasOwnProperty(str.charAt(i))
可以使用str.charAt(i) in charCounter
,但我没有测试过)
据我所知,没有内置的支持。 但是,您可以使用String.charAt()
迭代字符串,也可以将结果保存在数组中。 如果数组已经包含特定的字符,你可以增加一个数字或类似的东西。
,或者你可以将它分割成一个数组,排序,然后只计数每个值
var str:String = "ABDDEEDDC";
var a:Array = str.split('');
a.sort();
var currChar:String = '';
var currCount:int = 0;
var maxChar:String = '';
var maxCount:int = 0;
for(var i:int=0; a[i]; i++){
if(currChar == a[i]) {
currCount++;
if(currCount > maxCount){
maxCount = currCount;
maxChar = currChar;
}
} else {
currChar = a[i];
currCount = 1;
}
}
trace(maxChar + ' occurs '+maxCount+' times');
感谢您的回复!出于某种原因,我无法使用你的代码得到任何输出,也似乎无法找到问题,有什么可能是错误的? – nikoka 2010-08-24 10:34:37
你忘了初始化它们。将charCounter [str.charAt(i)] + = 1;'更改为'if(charCounter.hasOwnProperty([str.charAt(i)]))charCounter [str.charAt(i)] ++; else charCounter [str .charAt(i)] = 1;'@nikoka – Amarghosh 2010-08-24 11:23:40
+1为我提供了一个例子,并在我的“答案方法”中增加了更多细节 – hering 2010-08-24 11:34:05