1. package com.framework.util;  

  2. publicclass SerialNumber {  

  3. publicstaticvoid main(String[] args) {  

  4.         SerialNumber obj1 = new SerialNumber();  

  5.         System.out.println(obj1.String2Alpha("陈胜"));  

  6.         System.out.println(obj1.String2Alpha("吴广"));  

  7.     }  

  8. //字母Z使用了两个标签,这里有27个值 

  9. //i, u, v都不做声母, 跟随前面的字母 

  10. privatechar[] chartable =  

  11.           {  

  12. '啊''芭''擦''搭''蛾''发''噶''哈''哈',  

  13. '击''喀''垃''妈''拿''哦''啪''期''然',  

  14. '撒''塌''塌''塌''挖''昔''压''匝''座'

  15.           };  

  16. privatestaticchar[] alphatable =  

  17.       {  

  18. 'A''B''C''D''E''F''G''H''I',  

  19. 'J''K''L''M''N''O''P''Q''R',   

  20. 'S''T''U''V''W''X''Y''Z'

  21.       };  

  22. privatestaticint[] table = newint[27];  

  23. //初始化 

  24.   {  

  25. for (int i = 0; i < 27; ++i){  

  26.           table[i] = gbValue(chartable[i]);  

  27.       }  

  28.   }  

  29. //主函数,输入字符,得到他的声母, 

  30. //英文字母返回对应的大写字母 

  31. //其他非简体汉字返回 '0' 

  32. publicstaticchar Char2Alpha(char ch) {  

  33. if (ch >= 'a' && ch <= 'z')  

  34. return (char) (ch - 'a' + 'A');  

  35. if (ch >= 'A' && ch <= 'Z')  

  36. return ch;  

  37. int gb = gbValue(ch);  

  38. if (gb < table[0])  

  39. return'0';  

  40. int i;  

  41. for (i = 0; i < 26; ++i) {  

  42. if (match(i, gb)) break;  

  43.       }  

  44. if (i >= 26)  

  45. return'0';  

  46. else

  47. return alphatable[i];  

  48.   }  

  49. //根据一个包含汉字的字符串返回一个汉字拼音首字母的字符串 

  50. publicstatic String String2Alpha(String SourceStr){  

  51.       String Result = "";  

  52. int StrLength = SourceStr.length();  

  53. int i;  

  54. try {  

  55. for (i = 0; i < StrLength; i++) {  

  56.               Result += Char2Alpha(SourceStr.charAt(i));  

  57.           }  

  58.       } catch (Exception e){  

  59.           Result = "";  

  60.       }  

  61. return Result;  

  62.   }  

  63. privatestaticboolean match(int i, int gb){  

  64. if (gb < table[i])  

  65. returnfalse;  

  66. int j = i + 1;  

  67. //字母Z使用了两个标签 

  68. while (j < 26 && (table[j] == table[i])) ++j;  

  69. if (j == 26)  

  70. return gb <= table[j];  

  71. else

  72. return gb < table[j];  

  73.   }  

  74. //取出汉字的编码 

  75. privatestaticint gbValue(char ch) {  

  76.       String str = new String();  

  77.       str += ch;  

  78. try {  

  79. byte[] bytes = str.getBytes("GB2312");  

  80. if (bytes.length < 2)  

  81. return0;  

  82. return (bytes[0] << 8 & 0xff00) + (bytes[1] &  

  83. 0xff);  

  84.       } catch (Exception e) {  

  85. return0;  

  86.       }  

  87.   }  

  88. }  

 *由于是静态的  别的方法在调用的时候要初始化下,否则字符集有变更。

SerialNumber serialNumber = new SerialNumber();
  String name = serialNumber.String2Alpha(vname);