获取任意字符串的首字母. 原理:根据gb2312编码是按拼音排序

<?php

$limit=array( //gb2312 拼音排序
    array(45217,45252), //A
    array(45253,45760), //B
    array(45761,46317), //C
    array(46318,46825), //D
    array(46826,47009), //E
    array(47010,47296), //F
    array(47297,47613), //G
    array(47614,48118), //H
    array(0,0),         //I
    array(48119,49061), //J
    array(49062,49323), //K
    array(49324,49895), //L
    array(49896,50370), //M
    array(50371,50613), //N
    array(50614,50621), //O
    array(50622,50905), //P
    array(50906,51386), //Q
    array(51387,51445), //R
    array(51446,52217), //S
    array(52218,52697), //T
    array(0,0),         //U
    array(0,0),         //V
    array(52698,52979), //W
    array(52980,53688), //X
    array(53689,54480), //Y
    array(54481,55289), //Z
);

$str="A:这是一个测试程序1";
$str= iconv("UTF-8","gb2312", $str);
echo $str."</br>";
$i=0;
while($i<strlen($str) ) {
    $tmp=bin2hex(substr($str,$i,1));
    if($tmp>=‘B0‘){ //汉字的开始
        $t=getLetter(hexdec(bin2hex(substr($str,$i,2))));
        printf("%c",$t==-1 ? ‘*‘ : $t );
        $i+=2;
    }
    else{
        printf("%s",substr($str,$i,1));
        $i++;
    }
}

function getLetter($num){
    global $limit;
    $char_index=65;
    foreach($limit as $k=>$v){
        if($num>=$v[0] && $num<=$v[1]){
            $char_index+=$k;
            return $char_index;
        }
    }
    return -1;
}
?>
时间: 2024-08-30 10:05:26

获取任意字符串的首字母. 原理:根据gb2312编码是按拼音排序的相关文章

PHP获取中英文字符串的首字母

使用场景:在对地区进行筛选时,我们经常会看到按照英文字母进行筛选定位,起初想着是数据表里存储上地区与首字母关联关系,但是觉得太麻烦,然后就想着根据地区名称来获取首字母,然后对地区进行分组,由此便用到了如下方法: function getFirstCharter($str) { if (empty($str)) { return ''; } $fchar = ord($str{0}); if ($fchar >= ord('A') && $fchar <= ord('z')) r

String-需求把一个字符串的首字母转成大写,其余为小写(只考虑英文大小写字母字符)

package cn.lianxi; public class DaXiao { public static void main(String[] args) { /*需求把一个字符串的首字母转成大写,其余为小写(只考虑英文大小写字母字符) * 分析: * 1.先获取第一个字符 * 2.获取除了第一个字符的以外字符 * 3.把第一个字符转成大写 * 4.把第一个字符转成大写 * 5.把除第一个字符以外的字符转成小写 * 6.字符串拼接 * */ String str = "helloWORLD&

asp.net获取中文汉字的首字母

/// <summary>  /// 通过汉字区位码得到其首字母(小写)  /// </summary>  /// <param name="nCode">汉字编码</param>  /// <returns></returns>  public string FirstLetter(int nCode) {   if (nCode >= 1601 && nCode < 1637) re

字符串按首字母分组并ToDictionary的实现

这是携程(深圳).net开发笔试的一道题目,要求实现字符串按首字母分组并ToDictionary输出,当时没有做出来,后面研究了一下,现在将这道题的几种实现方式记录下来. 首先初始化数据源,是一个List<string>对象.如下代码. //数据源 List<string> list = new List<string> { "Beijing", "Shanghai", "Tianjin", "Cho

fastjson将bean转成字符串时首字母变小写问题

一个项目需求要求返回值为JSON格式,且大多数字段是首字母大写,还有些是类似N_TX这样的格式,在输出这样的结果时遇到了问题,由于时间紧,就直接拷贝需要的结果字段建立JavaBean类,本以为最后直接调用JSON.toString(obj)返回结果即可,没想到返回值中自动将首字母变小写.查看fastjson源码发现关键在下面一段 public static List<FieldInfo> computeGetters(Class<?> clazz, Map<String, S

java根据汉字获取全拼和首字母

import net.sourceforge.pinyin4j.PinyinHelper; import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; import net.sourcefor

分别获取一个字符串中的字母和数字

string str20 = "ABC123"; string strSplit1=string.Empty; string strSplit2=string.Empty; //取出字符串中所有的数字 strSplit1 = Regex.Replace(str20,"[a-z]","",RegexOptions.IgnoreCase); //取出字符串中所有的英文字母 strSplit2 = Regex.Replace(str20,"[

获取多个汉字首字母(php)

1 <?php 2 function getfirstchar($s0){ 3 $fchar = ord($s0{0}); 4 if($fchar >= ord("A") and $fchar <= ord("z") )return strtoupper($s0{0}); 5 $s1 = iconv("UTF-8","gb2312", $s0); 6 $s2 = iconv("gb2312"

PHP 小方法之 获取中文字的首字母

public function getFirstCharter($str) { if (empty($str)) { return ''; } $fchar = ord($str{0}); if ($fchar >= ord('A') && $fchar <= ord('z')) return strtoupper($str{0}); $s1 = iconv('UTF-8', 'gb2312', $str); $s2 = iconv('gb2312', 'UTF-8', $s1