假设我有多个文件,如下所示,我循环将它们存储在名为“text”的变量中:
<Property name="FirstProp"><![CDATA[ ]]></PackageProperty>
<Property name="SecondProp"><![CDATA[ ]]></PackageProperty>
<Property name="ThirdProp"><![CDATA[ ]]></PackageProperty>
某些文件中可以包含 CDATA,因此每个文件唯一的共同点是属性名称。我已将 PropertyNames 存储在名为 propNames[ ] 的字符串数组中。因此,“SecondProp”将是 propNames[1]。
我现在想替换第二行以包含一些 CDATA,我已经尝试过,但它不起作用,因为我只想它查看当前行的前后,而不是整个文件。
String CDATAReplacement = "<Property name=\"SecondProp\"><![CDATA[ Some Value ]]></PackageProperty>";
text.replaceAll( "(.*)"+propNames[1]+"(.*)", CDATAReplacement )
最终结果:
<Property name="FirstProp"><![CDATA[ ]]></PackageProperty>
<Property name="SecondProp"><![CDATA[ Some Value ]]></PackageProperty>
<Property name="ThirdProp"><![CDATA[ ]]></PackageProperty>
我可以使用 sed 轻松完成此操作并在 java 程序中执行脚本,但我知道这是不好的做法,因此 Java 解决方案会更好。
最佳答案
我建议您使用JDOM使用 XML 的库:http://www.studytrails.com/java/xml/jdom2/java-xml-jdom2-xpath.jsp 。因此您可以通过 XPath 而不是 regexps 进行工作。
关于java - 使用正则表达式从子字符串替换java中的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27109391/