Js查找字符串中出现次数最多的字符及个数实例解析
如sssfgtdfssddfsssfssss,出现最多的字符是s,出现了12次
传统写法
分析:
1.准备一个空的json,通过循环字符串的每个字符来看,如果json里没有这个字符,就在json里创建一个新的数组,并把这个字符放进数组里,如果json里有这个字符,继续把字符添加进数组里,这时循环完json里有n个数组
2.找出json里长度最长的数组,此时长度即个数,而最多的字符就是这个参数,用到for...in...循环和参数attr
varstr="sssfgtdfssddfsssfssss";
functionmax(){
varjson={};
varnum=0;
varvalue=null;
for(vari=0;i<str.length;i++){
vark=str[i];
if(!json[k]){
json[k]=[];
}
json[k].push(k);//这里不需要else,否则只有存在这个字符时才添加。次数会少一次
}
for(varattrinjson){
if(num<json[attr].length){
num=json[attr].length;
value=json[attr][0];
}
}
alert("出现最多的字符是:"+value+',出现次数是:'+num);
};
max(str);
如果不想往json里放东西怎么做呢?
分析:
1.准备一个空的json,通过循环字符串的每个字符来看,如果json里没有这个字符,就把这个字符的数目设为1,如果有则数目++
2.循环json里的字符,只要存在,就把他的数目赋给一个变量,并且每次都比较新的字符数量和这个变量的大小,如果比变量大,则更新变量的值,最后这个变量的值就是最多字符的数目
而最多的字符就是json里这个字符
varstr="sssfgtdfssddfsssfssss";
functionmax(){
varjson={};
for(vari=0;i<str.length;i++){
vark=str[i];//k是所有字符,字符串也跟数组一样可以通过中括号下标方法取到每个子元素
if(json[k]){
json[k]++;//json里有这个字符时,把这个字符的数量+1,
}
else{
json[k]=1;//否则把这个字符的数量设为1
}
}
varnum=0;
varvalue=null;
for(varkinjson){//s、f、g、t、d
if(json[k]>num){
num=json[k];
value=k;
}
}
alert("出现最多的字符是:"+value+',出现次数是:'+num);
};
max(str);
正则的方法
分析:
1.字符串转为数组进行排序,以便正则选出相同的挨在一起的字符
2.通过正则replace()方法的两个参数,来匹配出现最多的字符和数量
varstr="sssfgtdfssddfsssfssss";
varnum=0;
varvalue=null;
functionmax(){
varnew_str=str.split("").sort().join("");
varre=/(\w)\1+/g;//没有\1,re就是一整个排好序的字符串,有了\1就是出现过的有重复的取出来,\1表示跟前面第一个子项是相同的
new_str.replace(re,function($0,$1){//$0代表取出来重复的一个个整体,如[s,s...],[f,f..],[d,d....]$1代表这个整体里的字符
if(num<$0.length){
num=$0.length;
value=$1
}
});
alert(value+":"+num)
};
max(str);