用JS找出字符串中出现次数最多的字母

作者:Blank 来源:怿飞's Blog 时间:2007-11-12 13:40:00 

网上有这样一道题目:

一个字符串String=“adadfdfseffserfefsefseetsdg”,找出里面出现次数最多的字母和出现的次数。

经典的解答思路为:取出字符串的第一个字符(首字母),利用的字符串的replace方法将符合正则表达式(第一个字符)替代为空,此字母出现的次数为原始的字符串长度减去替代后的字符串长度。循环迭代找出长度最长的字母。


<script type="text/javascript">
//<![CDATA[
var str ="adadfdfseffserfefsefseeffffftsdg"; //命名一个变量放置给出的字符串
var maxLength = 0; //命名一个变量放置字母出现的最高次数并初始化为0
var result = ''; //命名一个变量放置结果输入
while( str != '' ){ //循环迭代开始,并判断字符串是否为空
  oldStr = str; //将原始的字符串变量赋值给新变量
  getStr = str.substr(0,1); //用字符串的substr的方法得到第一个字符(首字母)
  eval("str = str.replace(/"+getStr+"/g,'')"); //详细如补充
  if( oldStr.length-str.length > maxLength ) { //判断原始的字符串的长度减去替代后字符串长度是否大于之前出现的最大的字符串长度
 maxLength = oldStr.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"),"")


标签:字符串,js
0
投稿

猜你喜欢

  • ASP UTF-8页面乱码+GB2312转UTF-8 +生成UTF-8格式的文件(编码)

    2011-04-19 11:15:00
  • 实例讲解Oracle到SQL Server主键迁移

    2009-03-25 13:30:00
  • MYSQL创建触发程序的方法

    2009-07-30 08:38:00
  • oracle 日期函数

    2010-07-23 13:32:00
  • asp access数据库并生成XML文件范例

    2011-03-29 10:49:00
  • 加快Firefox 3.5启动速度的方法

    2009-07-16 15:22:00
  • ASP小偷(远程数据获取)程序的入门教程

    2007-09-21 12:48:00
  • ASP写的不错的"数字分页"涵数

    2008-10-19 17:21:00
  • asp中isNull(str), isEmpty(str)和str=""的区别

    2008-02-15 13:10:00
  • 在Dreamweaver中自动设置网页的水平线颜色

    2007-02-03 11:30:00
  • asp如何利用当前时间生成随机函数?

    2010-01-01 15:44:00
  • JavaScript判断各种浏览器类型及版本

    2008-09-29 15:17:00
  • 去除新云CMS文章列表前的小圆点

    2008-09-27 13:36:00
  • 我的页面制作方法

    2008-03-23 13:51:00
  • ASP的数据命名有什么规则吗?

    2009-10-28 18:23:00
  • SQL中exists的使用方法

    2011-12-01 08:36:07
  • 在Oracle中向视图中插入数据的方法

    2009-02-28 10:42:00
  • 善用用户反馈——浅谈用户反馈数据的处理

    2010-07-09 16:58:00
  • 关于设计的六个误会

    2008-06-26 18:18:00
  • 什么是Ajax及Ajax的优势

    2007-09-07 09:56:00
  • asp之家 网络编程 m.aspxhome.com