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

来源:互联网 发布:蓝桥杯软件大赛 编辑:程序博客网 时间:2024/06/08 00:28

关于找出一个包含中文和英文的字符串中出现次数最多的字,

自己在网上找了各种解决方法,最后总结出了以下4种方法:

我是用PHP实现的,代码直接复制即用。




$str="法律框架go啊放假了ajg昆仑剑法,发 eoi";

//方法一


$strlen=mb_strlen($str,"utf-8");//获取中文长度,空格也包括
$arr=array();
for($i=0;$i<$strlen;$i++){
   $arr[]= mb_substr($str,$i,1,"utf-8");
}
$newarr=array_count_values($arr);
//统计数组中所有值出现的次数,返回数组
//键名为原数组的键值,键值为出现次数


//rsort($newarr);按照键值大到小排序,键名变成数字0,1..
arsort($newarr);//按照键值大到小排序,键名保存不变


$chararr=array_keys($newarr,Max(array_values($newarr)));//取包含指定值的键名
//$chararr=array_keys($newarr,current($newarr));



//方法二
/*
mb_regex_encoding('UTF-8');
mb_internal_encoding("UTF-8"); 
 
function mb_str_split($str){
    global $arr;//注意这个地方
   $temp=mb_split("(?<!^)(?!$)",$str);
   $arr[]=$temp[0];
    if(mb_strlen($temp[1],"utf-8")>1){
        mb_str_split($temp[1]);
    }else{
        $arr[]=$temp[1];
    }
    return $arr;
}
mb_str_split($str);
$newarr=array_count_values($arr);
arsort($newarr);
var_dump($newarr);
*/


//方法三
//$arr=preg_split('//u', $str,null,PREG_SPLIT_NO_EMPTY );


//方法四
//$arr=preg_split('/(?<!^)(?!$)/u', $str,null,PREG_SPLIT_NO_EMPTY ); 
//$arr=preg_split('/(?<!^)(?!$)/u', $str ); 
//var_dump($arr);
//(?<!expr)和(?!expr)都是零宽断言,前者表示此位置之前不匹配expr,后者表示此位置之后不匹配expr。
//在正则中^和$单独用表示开头和末尾。
//也就是说(?<!^)表示此位置之前不匹配开头,(?!$)表示此位置之后不匹配末尾。

//所以这个split匹配到的部分,为每两个字的中间位置(但是没有匹配到任何实际的字符)



阅读全文
0 0
原创粉丝点击