java中,中文首字母搜索是怎么实现的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中,中文首字母搜索是怎么实现的?相关的知识,希望对你有一定的参考价值。

例如请求参数中有.
name="w" 得到例:王力宏,王菲...
name="wf" 得到例:王菲,王福...

楼上的 楼主是要求输入字母求得相关的汉字字符串,而你音品码查询是从汉字求得首字母吧?
我做过一个公交查询系统,其中有个功能就是通过字母显示出相应的站点。
首先,你想通过‘W’得到王力宏、王菲等你就必须先把这些名字存到数据库中吧,然后你再在数据库中给这些名字项添加一个首字母的字段,当然你不用手动去输入它们的首字母,写个方法循环把它们的首字母输出并存入数据库中,方法可用楼上的音品码查询,我也写了个类似的方法,如下:
public class StringUtil

//private static Log logger = LogFactory.getLog(StringUtil.class);

// 国标码和区位码转换常量
int GB_SP_DIFF = 160;
//存放国标一级汉字不同读音的起始区位码
int[] secPosValueList =
1601, 1637, 1833, 2078, 2274, 2302, 2433, 2594, 2787,
3106, 3212, 3472, 3635, 3722, 3730, 3858, 4027, 4086,
4390, 4558, 4684, 4925, 5249, 5600;

//存放国标一级汉字不同读音的起始区位码对应读音
char[] firstLetter =
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j',
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
't', 'w', 'x', 'y', 'z';
char convert(String ch)
byte[] bytes=new byte[2];
try
bytes = ch.getBytes("GB2312");
catch (UnsupportedEncodingException e)
e.printStackTrace();

char result = '-';
int secPosValue = 0;
int i;
for (i = 0; i < bytes.length; i++)
bytes[i] -= GB_SP_DIFF;

secPosValue = bytes[0] * 100 + bytes[1];
for (i = 0; i < 23; i++)
if (secPosValue >= secPosValueList[i] && secPosValue < secPosValueList[i + 1])
result = firstLetter[i];
break;


return result;



调用convert(String str)方法就是返回str字符串的首字的首字母。其它的应该没什么难的了,代码看不懂给我发信息。
参考技术A Ajax就可以实现,然后用到模糊查询. 参考技术B 两种做法:
一种是在数据库中加一个字段.就是专门写入字的品音的.王力宏 wlh
还有一种是根据汉字的品音码查询"这是以前写过的一个例子.
就是从字典第一个字开始到最后一个字..但是不全,你可以查一下再..
在数据库查询时写:between xx and xx
就行了..
<div class="r1">
<a href="#" onclick="go_py('吖','八')">A</a> 
<a href="#" onclick="go_py('八','嚓')">B</a> 
<a href="#" onclick="go_py('嚓','咑')">C</a> 
<a href="#" onclick="go_py('咑','妸')">D</a> 
<a href="#" onclick="go_py('妸','发')">E</a> 
<a href="#" onclick="go_py('发','旮')">F</a> 
<a href="#" onclick="go_py('旮','铪')">G</a> 
<a href="#" onclick="go_py('铪','鸡')">H</a> 
<a href="#">I</a> 
<a href="#" onclick="go_py('鸡','咔')">J</a> 
<a href="#" onclick="go_py('咔','垃')">K</a> 
<a href="#" onclick="go_py('垃','妈')">L</a> 
<a href="#" onclick="go_py('妈','嗯')">M</a> 
<a href="#" onclick="go_py('嗯','哦')">N</a> 
<a href="#" onclick="go_py('哦','妑')">O</a> 
<a href="#" onclick="go_py('妑','七')">P</a> 
<a href="#" onclick="go_py('七','呥')">Q</a> 
<a href="#" onclick="go_py('呥','仨')">R</a> 
<a href="#" onclick="go_py('仨','他')">S</a> 
<a href="#" onclick="go_py('他','屲')">T</a> 
<a href="#">U</a> 
<a href="#">V</a> 
<a href="#" onclick="go_py('屲','夕')">W</a> 
<a href="#" onclick="go_py('夕','丫')">X</a> 
<a href="#" onclick="go_py('丫','帀')">Y</a> 
<a href="#" onclick="go_py('帀','坐')">Z</a>
</div>

Solr solr对拼音搜索和拼音首字母搜索的支持

问:对于拼音和拼音首字母的支持,当你在搜商品的时候,如果想输入拼音和拼音首字母就给出商品的信息,怎么办呢?

  实现方式有2种,但是他们其实是对应的。

  •      用lucene实现

   1.建索引, 多建一个索引字段,即拼音和拼音首字母这2个字段。合并的一个字段。

    (拼音和拼音首字母,可以通过pinyin4j.jar。将想要进行拼音搜索的字段进行拼音转换。)

   2.对输入的参数判断是否是拼音,(可以通过将传人的值转换为 utf-8 形式,如果转换后的字符串长度大于原来的字符串的长度,那么就不是拼音。否则就进行拼音查询)

   3.对拼音索引那个字段进行查询,和中文查询一样。参考中文查询。

  •      solr实现

   1.solr实现,不可以用solr自带的功能建索引,那样做无法将拼音和拼音首字母这个字段放入到索引文件中。

   2.想要将拼音放到索引文件库中,即需要从数据库取数据,然后将数据转换成拼音,再将拼音放入到索引库中。

    (用自动建索引的时候是通过db-config.xml文件进行的对数据库的查询。所以无法对查询得到的字段进行拼音转换。)。以上功能用solrj进行实现。solrj提供对solr的一些扩展。

   3.对拼音字段进行查询,和中文查询一样。

 

  以上思路,经百度搜索,转摘自他人。还为实践,实践后,进行总结。

以上是关于java中,中文首字母搜索是怎么实现的?的主要内容,如果未能解决你的问题,请参考以下文章

JAVA通过数组按首字母排序怎么做?

java怎么根据汉字获取字的拼音首字母

JS实现首字母排序

css 如何实现 首字母有下划线

JAVA 汉字首字母排序

在PostgreSQL中实现按拼音汉字拼音首字母搜索的例子