設為首頁

收藏本站

導覽首頁 | 新登場    ◇聯盟溫泉 | 民宿 | 人力銀行 | 女性 |

類型:js_article

用JS得到字符串中出現次數最多的字母網頁
網上有這樣一道題目:
一個字符串string=「adadfdfseffserfefsefseetsdg」,找出裡面出現次數最多的字母和出現的次數。
解答思路為:取出字符串的第一個字符(首字母),利用的字符串的replace方法將符合正則表達式(第一個字符)替代為空,此字母出現的次數為原始的字符串長度減去替代後的字符串長度。循環迭代找出長度最長的字母。

<script type="text/javascript">
//<![cdata[

var str ="adadfdfseffserfefsefseeffffftsdg"; //命名一個變量放置給出的字符串
var maxlength = 0; //命名一個變量放置字母出現的最高次數並初始化為0
var result = ''; //命名一個變量放置結果輸入

while( str != '' ){ //循環迭代開始,並判斷字符串是否為空
  bdstr = str; //將原始的字符串變量賦值給新變量
  getstr = str.substr(0,1); //用字符串的substr的方法得到第一個字符(首字母)
  eval("str = str.replace(/"+getstr+"/g,'')"); //詳細如補充

  if( bdstr.length-str.length > maxlength ) { //判斷原始的字符串的長度減去替代後字符串長度是否大於之前出現的最大的字符串長度
 maxlength = bdstr.length-str.length; //兩字符串長度相減得到最大的字符串長度
 result = getstr + "=" + maxlength //返回最大的字符串結果(字母、出現次數)
 }
}

alert(result) //彈出結果

//]>
</script>
補充:
eval("str = str.replace(/"+getstr+"/g,'')");
可能很多人想這樣寫str = str.replace(/getstr/g,''),可結果卻是會出錯的。為什麼呢,在這句中正則表達式匹配的是getstr字符串,而不是getstr指向的首字母。通過eval方法可以避免(首先getstr得到指向的首字母,用字符串連接"str = str.replace(/"+getstr+"/g,'')",最後在eval中執行這段代碼,即:先解釋javascript代碼,然後再執行它)。

ps: 指出eval性能不好,容易出錯,而且可讀性不好。建議將eval("str = str.replace(/"+getstr+"/g,'')")改為:

str = str.replace(new regexp(getstr,"g"),"")


主旨:

內容:




104休閒信箱 2.3.0 © 104mm.com 2001 - 2018. 您尚未登錄
Page generated in 0.00815201 seconds with 3 Queries