多音字重组成新的词语句子

根据网上的相关信息结合自己的需求修改关于多音字重组的相关代码。如:比如  [a,b,c],[b],[f],[f,d] 这种数据格式,排列成: abff, abfd, bbff,bbfd,cbff,fbfd这种排列组合。

算法来自(点击打开链接

主要的处理方法(根据自己的逻辑处理)

@Service
public class PinYinService extends BaseService<PinYin>{
	private Logger logger = LoggerFactory.getLogger(getClass());
	@Autowired
 	private PinYinDao pinYinDao;
	/**
	 * @author zls
	 */
	public Json createpinyin(String tableName, String fieldName,String primaryKey) {
		Json json=new Json();
		Map<String,Object> map=new HashMap<String, Object>();
		map.put("tableName", tableName);
		map.put("fieldName", fieldName);
		map.put("primaryKey", primaryKey);
		//获取表信息
		try {
			List<Map<String,Object>>tablelist= pinYinDao.selectTableData(map);
			for(Map<String,Object> tableMap:tablelist){
				String id= tableMap.get("id").toString();
				String fileName=tableMap.get("fileName").toString();
				//String fileName="重庆银行解";
				char[] c=fileName.toCharArray();
				String simplyPinYin="";
				String allPinYin="";
				String[][] allparams=new String[c.length][];
				String[][] simplyparams=new String[c.length][];
				for(int i=0;i<c.length;i++){
					//根据汉字去查拼音
					List<String> pinyin=new ArrayList<String>();
					if(isChinese((c[i]+""))){
						pinyin=pinYinDao.selectPinYin(c[i]+"");
					}else{
						pinyin.add((c[i]+""));
					}
						String[] aa=new String[pinyin.size()];
						String[] bb=new String[pinyin.size()];
						for(int j=0;j<pinyin.size();j++){
							allparams[i]=aa;  
							allparams[i][j]=pinyin.get(j);
							simplyparams[i]=bb;
							simplyparams[i][j]=pinyin.get(j).toCharArray()[0]+"";
						}
				}
				String[] rsall=getPermutations(allparams);
				String[] rssimply=getPermutations(simplyparams);
		        for (String all : rsall) {
		        	allPinYin=allPinYin+all+",";
		        }
		        rssimply=arrayUnique(rssimply);
		        for (String simply : rssimply) {
		        	simplyPinYin=simplyPinYin+simply+",";
		        }
				Map<String,Object> paramMap=new HashMap<String, Object>();
				paramMap.put("primaryKey", primaryKey);
				paramMap.put("id", id);
				paramMap.put("allPinYin", allPinYin.substring(0,allPinYin.length() - 1));
				paramMap.put("simplyPinYin", simplyPinYin.substring(0,simplyPinYin.length() - 1));
				paramMap.put("tableName", tableName);
				//插入表数据简拼和全拼
				pinYinDao.insertTableData(paramMap);
			}
			json.setMsg("创建拼音成功");
			json.setState(BaseController.SUCCESS_STATE);
			json.setSuccess(true);
			return json;
		} catch (Exception e) {
			json.setMsg("系统内部错误");
			json.setState(BaseController.ERROR_SYS_STATE);
			json.setSuccess(false);
			logger.error("【PinYinService-createpinyin-error:" + e.getMessage() + "】");
			return json;
		}
	}

拼装组合多音字参数(不需要改变)

public static String[] getPermutations(String[][] params) {
        StringBuffer buffer=new StringBuffer();
        ArrayList<String> list=new ArrayList<String>();
        int[] lengths=new int[params.length];
        for (int i=0; i<params.length; i++) {
            lengths[i]=params[i].length;
        }
        ArrayIndex arrayIndex=new ArrayIndex(lengths);
        int[] indexs=arrayIndex.get();
        do {
            buffer.setLength(0);
            for (int i=0; i<params.length; i++) {
                buffer.append(params[i][indexs[i]]);
            }
            list.add(buffer.toString());
            indexs=arrayIndex.next();
        } while (indexs!=null);
        return list.toArray(new String[list.size()]);
    }
数组去重(不需要改变)
 public static String[] arrayUnique(String[] a) {  
	   Set<String> set = new HashSet<String>();  
	   set.addAll(Arrays.asList(a));  
	   return set.toArray(new String[0]);  
   }

判断是否为汉字(不需要改变)

 public static boolean isChinese(String str) {
		String regEx = "[\u4e00-\u9fa5]";
		Pattern pat = Pattern.compile(regEx);
		Matcher matcher = pat.matcher(str);
		boolean flg = false;
		if (matcher.find()){
			flg = true;
		}
		return flg;
	}
最后是多音字拼装工具类(不需要改变,直接用)
/**
 * 
 * @Title ArrayIndex.java
 * @Description 多音字拼装工具类
 * @Author zls
 */
public class ArrayIndex {
	  private int index;
	    private int[] limits;
	    private int[] indexs;
	    public ArrayIndex(int[] limits) {
	        this.limits=limits;
	        indexs=new int[limits.length];
	    }
	    public int[] get() {
	        return indexs;
	    }
	    public int[] next() {
	        for (int i=index; i<indexs.length; i++) {
	            if (++indexs[i]<limits[i]) {
	                return indexs;
	            }
	            indexs[i]=0;
	        }
	        return null;
	    }
}













  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值