java中英文获取首字母

package com.ijushang.shop.util;

/**
 * @author shiyz
 * @creation date 2012-10-25 上午11:01:34
 *
 */
public class GetPinyin {
    /**
     * @param args
     */
    public static void main(String[] args) {
        GetPinyin obj1 = new GetPinyin();
        System.out.println(obj1.String2Alpha("shiyuezhong测试:中华人民共和国!","b"));//shiyuezhongCS0ZHRMGHG0
        System.out.println(obj1.String2Alpha("程序猿","s")); //cxy
        System.out.println(obj1.String2AlphaFirst("机","b")); //D
        System.out.println(obj1.String2AlphaFirst("q","b"));//英文按实际大小写输出  q 参数不起作用
        System.out.println(obj1.String2AlphaFirst("包拯","s")); //b
        System.out.println(obj1.String2AlphaFirst("Kobe","s"));//英文按实际大小写输出  K 参数不起作用
        System.out.println(obj1.gbValue('施'));//51881
      } 
        public GetPinyin() {

        }
         //字母Z使用了两个标签,这里有27个值
         //i, u, v都不做声母, 跟随前面的字母
        private char[] chartable =
           {
             '啊', '芭', '擦', '搭', '蛾', '发', '噶', '哈', '哈',
             '击', '喀', '垃', '妈', '拿', '哦', '啪', '期', '然',
             '撒', '塌', '塌', '塌', '挖', '昔', '压', '匝', '座'
            };
        private char[] alphatableb =
          {
             'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
             'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
           };
        private char[] alphatables =
              {
                 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
                 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
               };
        private int[] table = new int[27];  //初始化
          {
                 for (int i = 0; i < 27; ++i) {
                     table[i] = gbValue(chartable[i]);
                 }
           }
        //主函数,输入字符,得到他的声母,
        //英文字母返回对应的大小写字母
        //其他非简体汉字返回 '0'  按参数
         public char Char2Alpha(char ch,String type) {
              if (ch >= 'a' && ch <= 'z')
               // return (char) (ch - 'a' + 'A');
                  return ch;
              if (ch >= 'A' && ch <= 'Z')
                  return ch;

                 int gb = gbValue(ch);
                 if (gb < table[0])
                  return '0';

              int i;
                 for (i = 0; i < 26; ++i) {
                  if (match(i, gb))
                         break;
              }

                 if (i >= 26){
                  return '0';}
                 else{
                     if("b".equals(type)){//大写
                         return alphatableb[i];
                     }else{//小写
                         return alphatables[i];
                     }
                 }
          }
     //根据一个包含汉字的字符串返回一个汉字拼音首字母的字符串
     public String String2Alpha(String SourceStr,String type) {
         String Result = "";
         int StrLength = SourceStr.length();
         int i;
      try {
          for (i = 0; i < StrLength; i++) {
                 Result += Char2Alpha(SourceStr.charAt(i),type);
             }
         } catch (Exception e) {
          Result = "";
         }
      return Result;
    }
   //根据一个包含汉字的字符串返回第一个汉字拼音首字母的字符串
     public String String2AlphaFirst(String SourceStr,String type) {
           String Result = "";
         try {
           Result += Char2Alpha(SourceStr.charAt(0),type);
         } catch (Exception e) {
           Result = "";
         }
      return Result;
    }
     private boolean match(int i, int gb) {
            if (gb < table[i])
               return false;
             int j = i + 1;

             //字母Z使用了两个标签
             while (j < 26 && (table[j] == table[i]))
                 ++j;
             if (j == 26)
                 return gb <= table[j];
            else
                 return gb < table[j];
          }

     //取出汉字的编码
     private int gbValue(char ch) {
         String str = new String();
         str += ch;
         try {
             byte[] bytes = str.getBytes("GBK");
                 if (bytes.length < 2)
                     return 0;
                 return (bytes[0] << 8 & 0xff00) + (bytes[1] &
                         0xff);
             } catch (Exception e) {
               return 0;
             }
         }
}


Java获取中文字符串的首字母,可以通过拼音转换库(如 `pinyin4j`)实现。该库提供了将中文字符转换为拼音的功能,并从中提取拼音首字母[^1]。以下是实现步骤和代码示例: ### 实现方法 1. **引入依赖库** 需要引入 `pinyin4j` 库来处理中文字符到拼音的转换。可以通过 Maven 或手动添加 JAR 文件的方式引入: ```xml <dependency> <groupId>com.belerweb</groupId> <artifactId>pinyin4j</artifactId> <version>2.5.0</version> </dependency> ``` 2. **编写获取首字母的逻辑** 通过 `PinyinHelper` 类获取中文字符的拼音,并提取每个字符的首字母。 ### Java 代码实现 ```java import net.sourceforge.pinyin4j.PinyinHelper; public class ChineseToPinyin { public static String getFirstLetter(String chinese) { StringBuilder pinyin = new StringBuilder(); for (int i = 0; i < chinese.length(); i++) { char ch = chinese.charAt(i); if (Character.toString(ch).matches("[\\u4e00-\\u9fa5]+")) { // 判断是否为中文字符 String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(ch); if (pinyinArray != null) { pinyin.append(pinyinArray[0].charAt(0)); // 获取拼音的首字母 } } else { pinyin.append(ch); // 非中文字符保持不变 } } return pinyin.toString(); } public static void main(String[] args) { String chinese = "中文首字母"; String firstLetters = getFirstLetter(chinese); System.out.println(firstLetters); // 输出:zwsym } } ``` ### 说明 - 代码使用了 `PinyinHelper.toHanyuPinyinStringArray(ch)` 方法来获取中文字符的拼音数组,并取第一个拼音(考虑多音字情况)。 - 非中文字符(如英文、数字、符号)会直接追加到结果中,不做转换。 - 输出结果为所有字符的首字母,中文字符转为拼音首字母,非中文字符保持原样。 ### 注意事项 - `pinyin4j` 不支持 Java 模块系统(JPMS),在 Java 9 及以上版本中使用时可能需要额外配置。 - 若需处理大写首字母,可使用 `toUpperCase()` 方法对结果进行转换。 ### 示例输出 输入 `"中文首字母"`,输出 `"zwsym"`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值