java获取汉字首字母,绝对靠谱。一眼开透代码原理,傻瓜看完也会自己写
package system.user.tool;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @author: zzjun
* @date: 8/28/20 09:49
* @description: 汉字转换成拼音
*/
public class HanZiConverterPinYin {
public HanZiConverterPinYin() {
// 初始化汉字拼音字母对照表
initChinesePinyinComparisonMapList();
}
/**
* 汉字拼音字母对照表
* */
private List<ChinesePinyinComparisonMap> chinesePinyinComparisonMapList;
/**
* 初始化汉字拼音字母对照表
* */
private void initChinesePinyinComparisonMapList(){
chinesePinyinComparisonMapList = new ArrayList<ChinesePinyinComparisonMap>();
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-20319,-20284,'A'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-20283,-19776,'B'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-19775,-19219,'C'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-19218,-18711,'D'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-18710,-18527,'E'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-18526,-18240,'F'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-18239,-17923,'G'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-17922,-17418,'H'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-17417,-16475,'J'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-16474,-16213,'K'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-16212,-15641,'L'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-15640,-15166,'M'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-15165,-14923,'N'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-14922,-14915,'O'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-14914,-14631,'P'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-14630,-14150,'Q'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-14149,-14091,'R'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-14090,-13319,'S'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-13318,-12839,'T'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-12838,-12557,'W'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-12556,-11848,'X'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-11847,-11056,'Y'));
chinesePinyinComparisonMapList.add(new ChinesePinyinComparisonMap(-11055,-10247,'Z'));
}
/**
* 遍历获取首字母
* */
public char getPY(char c) throws Exception{
byte[] bytes = String.valueOf(c).getBytes("GBK");
//双字节汉字处理
if(bytes.length==2){
int hightByte = 256 + bytes[0];
int lowByte = 256 + bytes[1];
int asc = (256 * hightByte + lowByte) - 256 * 256;
// 遍历转换
for (ChinesePinyinComparisonMap map : this.chinesePinyinComparisonMapList){
if(asc>=map.getSAscll() && asc<=map.getEAscll()){
return map.getCode();
}
}
}
// 单字节或其他直接输入,不执行编码
return c;
}
/**
* 获取汉字拼音
* */
public String getHanZiPY(String str){
try{
StringBuilder pyStrBd = new StringBuilder();
for(char c : str.toCharArray()){
pyStrBd.append(getPY(c));
}
return pyStrBd.toString();
}catch(Exception e){
e.printStackTrace();
}
return null;
}
/**
* 汉字拼音字母对照类
* */
@Data
@AllArgsConstructor
private class ChinesePinyinComparisonMap{
// 区间开头
private int sAscll;
// 区间结尾
private int eAscll;
// 对应字母
private char code;
}
public static void main(String[] args) {
HanZiConverterPinYin hanZiConverterPinYin = new HanZiConverterPinYin();
String code = hanZiConverterPinYin.getHanZiPY("为了 配合 模糊 查询 很多 情况下 我们 需要 用到 汉字 首字母 进行 模糊 查询, 这样 的 例子 很多, 做法 也很多");
System.out.println(code);
}
}