浏览 3933 次
锁定老帖子 主题:汉字首字母转换
精华帖 (0) :: 良好帖 (0) :: 新手帖 (17) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-04-12
说到编程用存储用汉字,这个在中国是很普遍的事情。 但是有的时候用汉字存储能给我们带来方便,直观,但是在功能设计上会遇到一些弊病。
设想一个事例: 平常存储东西的时候都是大家把东西名字存储进数据库,但是在有的场合,我们需要商品按名称首字母查询,就像英语一样。这个时候我开始的做法可能会在数据库新增加一列,用来存储汉语拼音,这个代价,工作量如果还是一个未知,特别不能修改数据库时候,也是一大麻烦。
今天无意发现一个东东能解决这个问题,虽然这个估计大家都有讨论和实践过,再次炒下冷饭。
pinyin4j 这个是专门转化汉语拼音的JAR。
现在我来演示一下。
public static String getPinYinHeadChar(String str) { String convert = ""; for (int j = 0; j < str.length(); j++) { //提取每一个汉字 !Char能存储汉字 这个是Java基础哦。 char word = str.charAt(j); // 提取汉字的首字母 String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word); if (pinyinArray != null) { //如果是汉字能提取当前首字母 convert += pinyinArray[0].charAt(0); } else { //如果不是汉字 非汉字类型 英语类型 不用转换 convert += word; } } return convert; } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2012-04-15
Char是占两个字节的,当然能存储汉字了
|
|
返回顶楼 | |
发表时间:2012-04-16
谢谢。以前好真没用过。哈哈
|
|
返回顶楼 | |
发表时间:2012-04-16
最后修改:2012-04-16
有必要专门用一个pinyin4j这么复杂的东西吗?
一个很简单的类就能处理完。 原理就是存储a-z每个字母为首的第一个汉字,然后对任意汉字进行比较就行了(因为Unicode中汉字的是按字典里拼音的顺序排列的,拼音小的在前,拼音大的在后)。 比如存储 a啊 b八 c擦 d搭 ... z匝 如果来一个"帮",发现 八<=帮<擦,则说明“擦”的首字母与“八”相同,即b。 如果来一个"醋"同样擦<=醋<搭,则醋首字母为c。 ... 其实是非常简单的。 |
|
返回顶楼 | |
发表时间:2012-04-16
mfkvfn 写道 有必要专门用一个pinyin4j这么复杂的东西吗?
一个很简单的类就能处理完。 原理就是存储a-z每个字母为首的第一个汉字,然后对任意汉字进行比较就行了(因为Unicode中汉字的是按字典里拼音的顺序排列的,拼音小的在前,拼音大的在后)。 比如存储 a啊 b八 c擦 d搭 ... z匝 如果来一个"帮",发现 八<=帮<擦,则说明“擦”的首字母与“八”相同,即b。 如果来一个"醋"同样擦<=醋<搭,则醋首字母为c。 ... 其实是非常简单的。 你的这个做法只能判断首字母吧,如果想要汉字的拼音是没有办发的吧 |
|
返回顶楼 | |
发表时间:2012-04-16
楼主的标题、代码都是要首字母。
|
|
返回顶楼 | |
发表时间:2012-04-16
好像见过类似的jar
|
|
返回顶楼 | |