根据网上的相关信息结合自己的需求修改关于多音字重组的相关代码。如:比如  [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());@Autowiredprivate 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. 易成新能加码光伏产业链 作价28.29亿收购赛维两子公司

    易成新能11月17日晚公告称,拟通过向债权人发行股份及支付现金方式,合计作价28.29亿元,取得破产重整后江西赛维100%股权和新余赛维100%股权. 同时,公司拟向控股股东中国平煤神马集团等5名对象 ...

  2. php数据表相同字段合并,php实现两表合并成新表并且有序排列的方法

    这篇文章主要介绍了php实现两表合并成新表并且有序排列的方法,涉及针对数组的遍历与排序操作技巧,具有一定的实用价值,需要的朋友可以参考下 本文实例讲述了php实现两表合并成新表并且有序排列的方法.分享 ...

  3. pandas使用date_range函数生成日期序列数据、pandas将两个日期序列数据作差生成新的日期差数据列(8 days)、并提取天数数值(8)

    pandas使用date_range函数生成日期序列数据.pandas将两个日期序列数据作差生成新的日期差数据列(8 days).并提取天数数值(8) 目录

  4. 数据库自动备份还原成新库脚本

    数据库自动备份还原成新库脚本 BACKUP DATABASE [源数据库名] TO DISK = N'G:\testbackup.bak' WITH COMPRESSION,NOUNLOAD , NA ...

  5. 问题描述: 在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。 规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。 试设计一个算法,计算出将n堆石子

    问题描述: 在一个圆形操场的四周摆放着n 堆石子.现要将石子有次序地合并成一堆. 规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分. 试设计一个算法,计算出将n堆石子 ...

  6. 关于如何根据UI的版本把Tab切换成新的Notes UI Component

    Sent: Monday, December 29, 2014 5:07 PM 关于如何根据UI的版本把Tab切换成新的Notes UI Component,IconTabBar控件提供了一系列操作下 ...

  7. iNeuOS工业互联操作系统,图表与数据点组合成新组件,进行项目复用

    目       录 1.      概述... 1 2.      演示信息... 2 3.      应用过程... 2 1.   概述 针对有些行业的数据已经形成了标准化的建模或者有些公司专注于某 ...

  8. mysql 怎么修改成新字段_Mysql入门第一课《建表、改表、删表》

    原文在我的 Github 上,欢迎订阅. 前言 本人想学数据库了,于是有了这个Mysql系列. 本系列主要用于本人学习Mysql的记录,我把它当做学习笔记. 没有从安装数据库及用户新增和权限分配等知识 ...

  9. 巴比特 | 元宇宙每日必读:数字藏品二级市场乱象丛生,00后成新韭菜,监管迫在眉睫?...

    摘要:尽管众多数字藏品平台均明确限制二级流转,但场外交易仍屡见不鲜.有的平台直接开通寄售服务,相当于开通了二级交易市场.有的更是直接操纵藏品价格涨跌,重复着2017年ICO割韭菜的故事.在暴利引诱下, ...

最新文章

  1. 【超赞】技术架构的战略和战术原则
  2. Nginx配置和内核优化 实现突破十万并发
  3. 依赖包的添加和自动检测机制
  4. 友盟QQ好友或者空间分享成功,但回调失败或取消
  5. YunYang1994/tensorflow-yolov3 Readme 翻译
  6. JS中this关键字
  7. RabbitMQ 入门:1. Message Broker(消息代理)
  8. Java垃圾回收日志解析
  9. LeetCode 404. 左叶子之和(递归)
  10. 二叉树的中序遍历_94. 二叉树的中序遍历 - 中等
  11. Visual Studio配置(4):项目属性页-VC++目录
  12. 发电厂计算机控制系统,火电厂dcs控制系统
  13. 深蓝学院-多传感器融合定位-第3章作业
  14. python笔记11 - lambda函数,globals()/locals()函数,eval()exec()函数,闭包函数,函数式编程,高阶函数
  15. golang 数组组合成最小的整数_整数数组拼成一个最小或最大的数
  16. c语言入门,通俗易懂
  17. Java引用和C++引用
  18. cad的dwg如何转换成pdf?
  19. JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配
  20. 非支配排序遗传算法c语言,第三代非支配排序遗传算法(NSGA-III)

热门文章

  1. 直播平台软件开发中选择点播播放器哪家强?
  2. 【SQL】模糊查找(like)
  3. 从优酷到阿里文娱,大麦终于“转正”了?
  4. Cris 的 Python 数据分析笔记 05:Pandas 数据读取,索引,切片,计算,列整合,过滤,最值
  5. shell控制超时时间,自动退出
  6. stm32 智能避障小车(二)之sg90
  7. xPC信号采集和分析(1)
  8. 陆奇:“黑客精神”过时了吗?答案是永远不会
  9. Web开发者成长路线总结
  10. onvif/rtsp转gb28181协议,无缝对接国标平台