黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

AutoCompleteTextView輸入漢字拼音首字母實(shí)現(xiàn)過(guò)

系統(tǒng) 2546 0
2011年最后一篇。。。。

上一篇中的代碼最好需要優(yōu)化,特別對(duì)字庫(kù)文件需要優(yōu)化。股票成千上萬(wàn)個(gè),如何做到快速匹配是很值得研究的。

寫(xiě)了一個(gè)轉(zhuǎn)換函數(shù),將類(lèi)似4E48 (me5,ma5,yao1)的文本轉(zhuǎn)換成4E48 (m,y),代碼如下:
    
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class TestMain {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		final String fromName = "e:\\unicode_to_hanyu_pinyin.txt";
	    final String toName = "e:\\unicode_to_simple_pinyin.txt";
		TestMain t=new TestMain();
		t.convert(fromName,toName);
	}

	public void convert(String fromFile,String toFile) {
		 
        try {
        	BufferedWriter writer = new BufferedWriter(new FileWriter(new File(toFile)));
        	BufferedReader reader = new BufferedReader(new FileReader(new File(fromFile)));
            String tempString = null;
            int line = 1;
            while ((tempString = reader.readLine()) != null) {
                // 顯示行號(hào)
                String pre=getPre(tempString);//獲得“(”前面部分
                
                String[] t=getMiddle(tempString);//
                String s="";
                for(int i=0;i<t.length;i++){
                	String sub=t[i].substring(0, 1);
                	if(i+1<t.length){//去掉重復(fù)項(xiàng)
                		String sub2=t[i+1].substring(0, 1);
                		if(sub.equals(sub2)){
                			continue;
                		}
                	}
                	s+=","+sub;
                }
                s=pre+s.substring(1)+")";
                writer.write(s);
                writer.newLine();
                line++;
            }
            reader.close();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        } 
        
    }
	
	private String getPre(String pinyinRecord){
		int indexOfLeftBracket = pinyinRecord.indexOf("(")+1;
		 String stripedString = pinyinRecord.substring(0,indexOfLeftBracket);
		 return stripedString;
	}
	
	private String[] getMiddle(String pinyinRecord){
            int left= pinyinRecord.indexOf("(");
            int right= pinyinRecord.lastIndexOf(")");
            String middle = pinyinRecord.substring(left+ "(".length(), right);
            return middle.split(",");
    }
}

  


修改PinYin4j.java:
    
package com.ql.util;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class PinYin4j {
	
	
	public PinYin4j(){
	}
	/**
	 * 字符串集合轉(zhuǎn)換字符串(逗號(hào)分隔),測(cè)試用
	 * 
	 * @param stringSet
	 * @return
	 */
	public String makeStringByStringSet(Set<String> stringSet) {
		StringBuilder str = new StringBuilder();
		int i = 0;
		for (String s : stringSet) {
			if (i == stringSet.size() - 1) {
				str.append(s);
			} else {
				str.append(s + ",");
			}
			i++;
		}
		return str.toString().toLowerCase();
	}

	
	/**
	 * 獲取拼音集合
	 * 
	 * @author wyh
	 * @param src
	 * @return Set<String>
	 */
	public Set<String> getPinyin(String src) {
			char[] srcChar;
			srcChar = src.toCharArray();

			//1:多少個(gè)漢字
			//2:每個(gè)漢字多少種讀音
			String[][] temp = new String[src.length()][];
			for (int i = 0; i < srcChar.length; i++) {
				char c = srcChar[i];
				// 是中文或者a-z或者A-Z轉(zhuǎn)換拼音(我的需求,是保留中文或者a-z或者A-Z)
				if (String.valueOf(c).matches("[\\u4E00-\\u9FA5]+")) {//中文
						String[] t = PinyinHelper.getUnformattedHanyuPinyinStringArray(c);
						temp[i] = new String[t.length];
						for(int j=0;j<t.length;j++){
//							temp[i][j]=t[j].substring(0,1);//獲取首字母
							temp[i][j]=t[j];//獲取首字母,不需要再截取了
						}
				} else if (((int) c >= 65 && (int) c <= 90)
						|| ((int) c >= 97 && (int) c <= 122)
						||c>=48&&c<=57||c==42) {//a-zA-Z0-9*
					temp[i] = new String[] { String.valueOf(srcChar[i]) };
				} else {
					temp[i] = new String[] {"null!"};
				}
				
			}
			return paiLie(temp);//直接返回Set
	}
	
	/*
	 * 求2維數(shù)組所有排列組合情況
	 * 比如:{{1,2},{3},{4},{5,6}}共有2中排列,為:1345,1346,2345,2346
	 */
	private Set<String> paiLie(String[][] str){
		int max=1;
		for(int i=0;i<str.length;i++){
			max*=str[i].length;
		}
		Set<String> result=new HashSet<String>();
		for(int i = 0; i < max; i++){
            String s = "";
            int temp = 1;      //注意這個(gè)temp的用法。
            for(int j = 0; j < str.length; j++){
                temp *= str[j].length;
                s += str[j][i / (max / temp) % str[j].length];
            }
            result.add(s);
	    }
		
		return result;
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//nongyeyinheng,nongyeyinhang,nongyeyinxing
		PinYin4j t=new PinYin4j();
		String str = "農(nóng)業(yè)銀行1234567890abcdefghijklmnopqrstuvwxyz*";
		System.out.println(t.makeStringByStringSet(t.getPinyin(str)));
	}

}

  

其他地方可以保持不變。

最后,采用AutoCompleteTextView做出來(lái)的提示很丑,漂亮一點(diǎn)的看下圖,這可不是AutoCompleteTextView做的哦。
AutoCompleteTextView輸入漢字拼音首字母實(shí)現(xiàn)過(guò)濾提示(支持多音字)2

想做這樣的效果嗎。

AutoCompleteTextView輸入漢字拼音首字母實(shí)現(xiàn)過(guò)濾提示(支持多音字)2


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論