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

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

自己在网上找了各种解决方法,最后总结出了以下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匹配到的部分,为每两个字的中间位置(但是没有匹配到任何实际的字符)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值