关于输入法拼音拆分算法

今编码时,欲以注音之法打字于文本框内,而检其音于词库,期以词库之小而得输入之疾也。为之, 须臾困于句读之否识,故求百度以拆解之法,或拙或鄙,无可为者。有道是:“纸上得来终觉浅,觉知此事要躬行。”又竟惊觉声韵难辨,汉洋不分,汗颜。温之,汝等皆匹夫耳!吾来装逼!!!若本文有幸为君转述,望注出处,

/**
 将给出的拼音串以前字贪婪原则拆分成汉语读音,如
 renai
 有两种拆分方法,一作“re,nai”,一作“ren,ai”
 以前字贪婪原则拆解成“ren,ai”
 */
public class PinYinSpliter {
	//此类用于缓存数据和方法返回数据
	private static class Wrapper{
		int cursor;
		Matcher shengMu;
		Matcher yunMu;
		Matcher stand;
	}
	//几个可以单独作为音节的韵母
	private static Pattern stand=Pattern.compile(
			"([ae](?:ng|i|n)|er|ao|ou|a|e)");
	//11个多拼音节韵母 ia iao ian iang iong ua uo uai uan uang üan
	//其他均为单拼音节
	private static Pattern yunmu=Pattern.compile(
			"(i(?:ong|ang|an|ao|a)|u(?:ang|an|ai|a|o)|[vu]an|[aeio]ng)|[aeu]i|[oi]u|[ivu]e|[aeiu]n|ao|er|a|o|e|i|u|v");
	private static Pattern shengmu=Pattern.compile(
			"(b|p|m|f|d|t|n|l|g|k|h|j|q|x|y|w|r|(?:z|c|s)h)|z|c|s");
	public static String split(String unSplit) {
		if(!unSplit.matches("\\w+")){
			//必须全部为字母
			return null;
		}
		Wrapper wrapper=new Wrapper();
		wrapper.shengMu=shengmu.matcher(unSplit);
		wrapper.yunMu=yunmu.matcher(unSplit);
		wrapper.stand=stand.matcher(unSplit);
		Listls=new LinkedList();
		while(wrapper.cursor

 

你可能感兴趣的:(关于输入法拼音拆分算法)