原创作者: site120   阅读:4537次   评论:0条   更新时间:2011-05-26    
xml 代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"   
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!--   
  5.     Mapping file autogenerated by MyEclipse - Hibernate Tools  
  6. -->  
  7. <hibernate-mapping>  
  8.     <class name="cn.site120.TestRegex" table="XXX_123456_ver"   dynamic-update="true" dynamic-insert="true">  
  9.         <id name="id" type="java.lang.Long">  
  10.             <column name="id" />  
  11.             <generator class="native" />  
  12.         </id>  
  13.         <property name="name" type="java.lang.String">  
  14.             <column name="name" length="50" />  
  15.         </property>  
  16.         <property name="versionNumber" type="java.lang.Integer">  
  17.             <column name="versionNumber" not-null="true" />  
  18.         </property>  
  19.      </class>  
  20. </hibernate-mapping>  

现在想用程序动态修改table="XXX_123456_ver"这里面的123456替换为其它代码,比如说022,010,等.

可以构造一个正则表达式来处理,由于这里面的123456也可能处于其它位置,比如: XXX_XXX_123456,所以可以这么来写

java 代码
  1. String regex = "(?<=_)([0-9]{3,4})(?=[_]?)";       
  2.       
  3. File tmpdir = new File(System.getProperty("java.io.tmpdir"));       
  4.       
  5. String classpath = TestNull.class.getClassLoader().getResource("").toString();       
  6.       
  7. classpath = classpath.substring("file:/".length());       
  8.       
  9. File configFile = new File(classpath + "config/XXX.hbm.xml");       
  10.       
  11. BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(configFile)));       
  12. PrintWriter writer = new PrintWriter(tmpdir.getPath() + "/" + "XXX.hbm.xml");       
  13.       
  14. StringBuffer content = new StringBuffer();       
  15. String temp = "";       
  16. while ((temp=reader.readLine()) != null)       
  17. {       
  18.     content.append(temp);       
  19.     content.append("\r\n");       
  20. }       
  21.       
  22. StringBuffer content_new = new StringBuffer();       
  23.       
  24. Pattern pattern = Pattern.compile(regex);       
  25. Matcher matcher = pattern.matcher(content);       
  26. if (matcher.find())       
  27. {       
  28.     matcher.appendReplacement(content_new , "123456");       
  29. }       
  30. matcher.appendTail(content_new);       
  31. //... 再将内容写到特定的目录下去. ...    

这里面(?<=_)([0-9]{3,4})(?=[_]?)中的(?<=)为反向预搜索,表示在该缝隙的左边有一个"_"符号,且不参于匹配

(?=)表示正向预搜索,表示在该缝隙的右边可能有一个"_"符号,且不参于匹配

评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics