栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

用java等语言仿360首页拼音输入全模糊搜索和自动换肤

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用java等语言仿360首页拼音输入全模糊搜索和自动换肤

360首页搜索效果如下


1、完成编写的schoolnet校园网主要目录结构如下


主要实现支持中文、拼音首字母、拼音全字母的智能搜索和换肤

页面效果如下



主要核心代码如下

1、head.jsp

<%@page import="java.io.File"%> 
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> 
 
 
 
校园网首页面 
 
 
 
 
 
 
 
 
  
 
 
 
 
 
  
   
   资料 音乐 新闻 小说 日志 
   
   
  
  • 校园网
  • 个人中心
  • 我的主页
  • 应用
  • 关于
  • 设置

2、主要js函数

//用于设置切换搜索类型,触发input控件焦点时显示对应的热门(前五个)内容(资料、音乐、新闻、小说、日志) 
function setsearchtype(o){ 
 $("#searchtype a").removeClass("current"); 
 $(o).addClass("current"); 
 var inputsearchtype=$(o).text(); 
 $("#inputsearchtype").val("搜索"+inputsearchtype); 
 document.getElementById("search-form").action="/schoolnet/other.do?flag="+o.name+"&searchpageNow=1"; 
 document.getElementById("search-form").name=o.name; 
 document.getElementById("searchimg").src="/schoolnet/images/front/"+o.id; 
 $("#topsearchtext").show(); 
 $("#searchfriendss").hide(); 
 if(o.name=="searchfriends") 
  { 
   $("#topsearchtext").hide(); 
   $("#searchfriendss").show(); 
  } 
} 
//用于设置显示智能提示的内容(模糊搜索时匹配的前十个) 
function setsearch() 
{ 
 var v=document.getElementById("topsearchtext").value; 
 var type=document.getElementById("search-form").name; 
 if(v.length==0) 
  { 
  $("#setsearch").html(""); 
  } 
 if(v.length>0) 
 { 
  $.ajax({     
   cache: true,     
   type: "POST",     
   url : "/schoolnet/ChangeInfo",    
   data: {"action":"setsearch","search":v,"searchtype":type}, 
   async: false, 
   dataType: "html", 
   success: function(data) { 
    $("#setsearch").html(""); 
    $("#setsearch").append(data); 
   }  
   }); 
 }; 
} 

主要java文件

if("searchsongs".equals(searchtype)) 
   { 
    String nameHEAD[]=ChinesePinYinTool.getHeadByString(search); 
    String nameHeadString=""; 
    for (int i = 0; i < nameHEAD.length; i++) { 
     nameHeadString+=nameHEAD[i]; 
    } 
    String nameALL[]=ChinesePinYinTool.stringToPinyin(search); 
    String nameAllString=""; 
    for (int i = 0; i < nameALL.length; i++) { 
     nameAllString+=nameALL[i]; 
    } 
    List songs=universityService.executeQueryByPage("from Song where to_pinyin(name) like '%"+ nameAllString +"%' or pinyin(name) like '%"+ nameHeadString +"%'", null, 1, 10); 
    for(int i=0;i"; 
    } 
    if (songs.size()!=0) { 
     con +="
  • 关闭
  • "; } else { con +="
  • 无任意匹配结果
  • "; } out.write(con); out.close(); } else if("setpifu".equals(action)) { String skinid=request.getParameter("skinid"); Skin skin=(Skin) universityService.findById(Skin.class, Integer.valueOf(skinid)); Users user=(Users) request.getSession().getAttribute("loginuser"); user.setSkin(skin); universityService.update(user); }

    做拼音转换时需导入pinyin4j.jar包
    ChinesePinYinTool拼音转换工具类
    package schoolnet.utils;  

     
    import net.sourceforge.pinyin4j.PinyinHelper; 
    import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; 
    import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; 
    import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; 
    import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; 
     
     
    public class ChinesePinYinTool { 
     public static void main(String[] args) { 
      String string[]=stringToPinyin("这个"); 
      for (int i = 0; i < string.length; i++) { 
       System.out.println(string[i]); 
      } 
     } 
      
     public static String[] stringToPinyin(String src) { 
      return stringToPinyin(src, false, null); 
     } 
     
      
     public static String[] stringToPinyin(String src, String separator) { 
      return stringToPinyin(src, true, separator); 
     } 
     
      
     public static String[] stringToPinyin(String src, boolean isPolyphone, 
       String separator) { 
      // 判断字符串是否为 
     
      if ("".equals(src) || null == src) { 
       return null; 
      } 
      char[] srcChar = src.toCharArray(); 
      int srcCount = srcChar.length; 
      String[] srcStr = new String[srcCount]; 
     
      for (int i = 0; i < srcCount; i++) { 
       srcStr[i] = charToPinyin(srcChar[i], isPolyphone, separator); 
      } 
      return srcStr; 
     } 
     
      
     public static String charToPinyin(char src, boolean isPolyphone, 
       String separator) { 
      // 创建汉语拼音处理 
      HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); 
      // 输出设置,大小写,音标方 
      defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); 
      defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); 
      StringBuffer tempPinying = new StringBuffer(); 
      // 如果是中 
      if (src > 128) { 
       try { 
        // 转换得出结果 
        String[] strs = PinyinHelper.toHanyuPinyinStringArray(src, 
          defaultFormat); 
        // 是否查出多音字,默认是查出多音字的第字符 
     
        if (isPolyphone && null != separator) { 
         for (int i = 0; i < strs.length; i++) { 
          tempPinying.append(strs[i]); 
          if (strs.length != (i + 1)) { 
    // 多音字之间用特殊符号间隔起来 
    tempPinying.append(separator); 
          } 
         } 
        } else { 
         tempPinying.append(strs[0]); 
        } 
     
       } catch (BadHanyuPinyinOutputFormatCombination e) { 
        e.printStackTrace(); 
       } 
      } else { 
       tempPinying.append(src); 
      } 
     
      return tempPinying.toString(); 
     
     } 
     
     public static String hanziToPinyin(String hanzi) { 
      return hanziToPinyin(hanzi, ""); 
     } 
     
      
     @SuppressWarnings("deprecation") 
     public static String hanziToPinyin(String hanzi, String separator) { 
      // 创建汉语拼音处理 
      HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat(); 
      // 输出设置,大小写,音标方 
      defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE); 
      defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE); 
      String pinyingStr = ""; 
      try { 
       pinyingStr = PinyinHelper.toHanyuPinyinString(hanzi, defaultFormat, 
         separator); 
      } catch (BadHanyuPinyinOutputFormatCombination e) { 
       e.printStackTrace(); 
      } 
      return pinyingStr; 
     } 
     
      
     public static String stringArrayToString(String[] str, String separator) { 
      StringBuffer sb = new StringBuffer(); 
      for (int i = 0; i < str.length; i++) { 
       sb.append(str[i]); 
       if (str.length != (i + 1)) { 
        sb.append(separator); 
       } 
      } 
      return sb.toString(); 
     } 
     
      
     public static String stringArrayToString(String[] str) { 
      return stringArrayToString(str, ""); 
     } 
     
      
     public static String charArrayToString(char[] ch, String separator) { 
      StringBuffer sb = new StringBuffer(); 
      for (int i = 0; i < ch.length; i++) { 
       sb.append(ch[i]); 
       if (ch.length != (i + 1)) { 
        sb.append(separator); 
       } 
      } 
      return sb.toString(); 
     } 
     
      
     public static String charArrayToString(char[] ch) { 
      return charArrayToString(ch, " "); 
     } 
     
      
     public static char[] getHeadByChar(char src, boolean isCapital) { 
      // 如果不是汉字直接返回 
      if (src <= 128) { 
       return new char[] { src }; 
      } 
      // 获取的拼 
      String[] pinyingStr = PinyinHelper.toHanyuPinyinStringArray(src); 
      // 创建返回对象 
      int polyphoneSize = pinyingStr.length; 
      char[] headChars = new char[polyphoneSize]; 
      int i = 0; 
      // 截取首字 
     
      for (String s : pinyingStr) { 
       char headChar = s.charAt(0); 
       // 首字母是否大写,默认是小 
     
       if (isCapital) { 
        headChars[i] = Character.toUpperCase(headChar); 
       } else { 
        headChars[i] = headChar; 
       } 
       i++; 
      } 
     
      return headChars; 
     } 
     
      
     public static char[] getHeadByChar(char src) { 
      return getHeadByChar(src, true); 
     } 
     
      
     public static String[] getHeadByString(String src) { 
      return getHeadByString(src, true); 
     } 
     
      
     public static String[] getHeadByString(String src, boolean isCapital) { 
      return getHeadByString(src, isCapital, null); 
     } 
     
      
     public static String[] getHeadByString(String src, boolean isCapital, 
       String separator) { 
      char[] chars = src.toCharArray(); 
      String[] headString = new String[chars.length]; 
      int i = 0; 
      for (char ch : chars) { 
     
       char[] chs = getHeadByChar(ch, isCapital); 
       StringBuffer sb = new StringBuffer(); 
       if (null != separator) { 
        int j = 1; 
     
        for (char ch1 : chs) { 
         sb.append(ch1); 
         if (j != chs.length) { 
          sb.append(separator); 
         } 
         j++; 
        } 
       } else { 
        sb.append(chs[0]); 
       } 
       headString[i] = sb.toString(); 
       i++; 
      } 
      return headString; 
     } 
    } 
    

    数据库建立相关函数
    fristPinyin : 此函数是将一个中文字符串的第一个汉字转成拼音首字母 (例如:"好的"->h)
    pinyin :此函数是将一个中文字符串对应拼音首字母的每个相连 (例如:"好的"->hd)
    to_pinyin :此函数是将一个中文字符串对应拼音全字母的每个相连 (例如:"好的"->haode)

    CREATE FUNCTION `fristPinyin`(P_NAME VARCHAr(255)) RETURNS varchar(255) CHARSET utf8 
    BEGIN 
     DECLARE V_RETURN VARCHAr(255); 
     SET V_RETURN = ELT(INTERVAL(CONv(HEx(left(ConVERT(P_NAME USING gbk),1)),16,10), 
      0xB0A1,0xB0C5,0xB2C1,0xB4EE,0xB6EA,0xB7A2,0xB8C1,0xB9FE,0xBBF7, 
      0xBFA6,0xC0AC,0xC2E8,0xC4C3,0xC5B6,0xC5BE,0xC6DA,0xC8BB, 
      0xC8F6,0xCBFA,0xCDDA,0xCEF4,0xD1B9,0xD4D1),  
     'A','B','C','D','E','F','G','H','J','K','L','M','N','O','P','Q','R','S','T','W','X','Y','Z'); 
     RETURN V_RETURN; 
    END 
    CREATE FUNCTION `pinyin`(P_NAME VARCHAr(255)) RETURNS varchar(255) CHARSET utf8 
    BEGIN 
     DECLARE V_COMPARE VARCHAr(255); 
     DECLARE V_RETURN VARCHAr(255); 
     DECLARE I INT; 
     
     SET I = 1; 
     SET V_RETURN = ''; 
     while I < LENGTH(P_NAME) do 
      SET V_COMPARE = SUBSTr(P_NAME, I, 1); 
      IF (V_COMPARE != '') THEN 
       #SET V_RETURN = CONCAt(V_RETURN, ',', V_COMPARE); 
       SET V_RETURN = CONCAt(V_RETURN, fristPinyin(V_COMPARE)); 
       #SET V_RETURN = fristPinyin(V_COMPARE); 
      END IF; 
      SET I = I + 1; 
     end while; 
     
     IF (ISNULL(V_RETURN) or V_RETURN = '') THEN 
      SET V_RETURN = P_NAME; 
     END IF; 
     
     RETURN V_RETURN; 
    END 
    CREATE FUNCTION to_pinyin(NAME VARCHAr(255) CHARSET gbk) 
    RETURNS VARCHAr(255) CHARSET gbk 
    BEGIN 
     DECLARE mycode INT; 
     DECLARE tmp_lcode VARCHAr(2) CHARSET gbk; 
     DECLARE lcode INT; 
     DECLARE tmp_rcode VARCHAr(2) CHARSET gbk; 
     DECLARE rcode INT; 
     DECLARE mypy VARCHAr(255) CHARSET gbk DEFAULT ''; 
     DECLARE lp INT; 
     SET mycode = 0; 
     SET lp = 1; 
     SET NAME = HEx(NAME); 
     WHILE lp < LENGTH(NAME) DO 
      SET tmp_lcode = SUBSTRINg(NAME, lp, 2); 
      SET lcode = CAST(ASCIi(UNHEx(tmp_lcode)) AS UNSIGNED);  
      SET tmp_rcode = SUBSTRINg(NAME, lp + 2, 2); 
      SET rcode = CAST(ASCIi(UNHEx(tmp_rcode)) AS UNSIGNED);  
      IF lcode > 128 THEN 
       SET mycode =65536 - lcode * 256 - rcode ; 
       SELECT CONCAt(mypy,pin_yin_) INTO mypy FROM t_base_pinyin WHERe CODE_ >= ABS(mycode) ORDER BY CODE_ ASC LIMIT 1; 
       SET lp = lp + 4; 
      ELSE 
       SET mypy = CONCAt(mypy,CHAr(CAST(ASCIi(UNHEx(SUBSTRINg(NAME, lp, 2))) AS UNSIGNED))); 
       SET lp = lp + 2; 
      END IF; 
     END WHILE; 
     RETURN LOWER(mypy); 
    END;

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/148995.html
    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号