客户有个需求:从word格式文档中读项目关键信息到数据库中,如:第一个表格中的联系人,项目名之类的信息,word中的格式不是固定的,能够会有些改动。java
方案1:读取第一个表格,而后再读取表格中的固定行列。缺点:位置若是改变,代码改动比较大。正则表达式
方案2:利用word中的域功能,域特色能够隐藏起来,不影响用户的信息录入。域格式为:$电话$。就能够用正则去获取域位置的信息。缺点:必需提供模版让用户下载再填写。数据库
/** * 正则表达式匹配两个指定字符串中间的内容 * @param soap * @return */ public static List<String> getSubUtil(String soap, String rgex){ List<String> list = new ArrayList<String>(); Pattern pattern = Pattern.compile(rgex);// 匹配的模式 Matcher m = pattern.matcher(soap); while (m.find()) { int i = 1; String group = m.group(i); int j = group.lastIndexOf('\t'); if(j>-1){ group=group.substring(j+1); } list.add(group); i++; } return list; } public static String getSubUtilSimple(String soap,String rgex){ Pattern pattern = Pattern.compile(rgex);// 匹配的模式 Matcher m = pattern.matcher(soap); while(m.find()){ return m.group(1); } return ""; } /** * 转存到map结构中 * @param text * @return */ public static Map convertKeyToMap(String text){ String rgex = "\\$(.*?)\\$"; List<String> subUtil = RgexUtils.getSubUtil(text, rgex); Map map=new HashMap(); for (String s : subUtil) { String rgex1 = "\\s(.*?)\\$"+s+"\\$"; String s1 = RgexUtils.getSubUtil(text, rgex1).get(0); map.put(s,s1); } return map; }
本方案利用了word中的高级功能完善的解决了导入数据的格式变化问题。百度谷歌绝对找不到,绝对原创。code