引用java
恐龍007 的 使用Java得到漢字的拼音首字母
因爲工做中須要從漢字中提取其拼音首字母,爲了偷懶^_^....本人寫了如下類實現了自動將漢字轉化爲其拼音首字母.c++
能夠直接提取如下類中的方法,並應用到其餘場合下.測試
因爲寫的比較倉促,對該類只進行了大概的測試,所以本人並不保證代碼百分之百的正確,請諒解...編碼
package com.test;code
import java.io.UnsupportedEncodingException;blog
public class PinYin {字符串
/**
*漢字拼音的首字母,不存在i,u,v
*/
private final static int[] HanZiCode = { 0xB0A1, 0xB0C5, 0xB2C1, 0xB4EE,
0xB6EA, 0xB7A2, 0xB8C1, 0xB9FE, 0xBBF7, 0xBFA6, 0xC0AC, 0xC2E8,
0xC4C3, 0xC5B6, 0xC5BE, 0xC6DA, 0xC8BB, 0xC8F6, 0xCBFA, 0xCDDA,
0xCEF4, 0xD1B9, 0xD4D1, 0xD8A0 };
private final static int LENGTH = HanZiCode.length;get/**
* string
* 該方法用於得到傳入的漢字的首字母
* io
*
* 若是傳入的word不屬於GB2312所包含的漢字,則原樣返回
*
*若是傳入多個漢字,則原樣返回
* @param word
* String型值
*/
public String getPinYin(String word) {
byte[] byte1;
char c = 'a' - 1;
try {
byte1 = word.getBytes("gb2312");
if (byte1.length == 2) {
int codeValue = ((byte1[0] + 256) * 256 + byte1[1] + 256);
if (codeValue >= HanZiCode[0]
&& codeValue <= HanZiCode[LENGTH - 1]) {
for (int i = 0; i < LENGTH; i++) {
if (codeValue >= HanZiCode[i]) {
if ((c + 1 == 'i')) {
c += 2;
}else if(c+1=='u'){
c+=3;
} else {
c++;
}
}
}
return c + "";
}
}
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
return word;
}/**
*得到傳入字符串中每一個漢字拼音的首字母
*/
public String chinese2PinYin(String str){
int length=str.length();
String result="";
for(int i=0;i
result+=getPinYin(str.substring(i, i+1));
}
return result;
}
/**
* @param args
* @throws UnsupportedEncodingException
*/
public static void main(String[] args) throws UnsupportedEncodingException {
// TODO Auto-generated method stub
PinYin py = new PinYin();
System.out.println(py.chinese2PinYin("漢字轉拼音"));
}}
對該類若有疑問請留言,本人將及時予以答覆..
對於其原理感興趣的朋友能夠參考GB2312的編碼表