我一直在試圖將我的頭圍繞這一段時間,但一直未能拿出一個優雅的解決方案。在字符串中獲得大多數字符的字符
問題:我有一個字符串與不同的字符(「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