我在尝试替换File中的String时遇到问题。 在我的文件中我有:
<!-- Header -->
<header fontName="Arial" size="24"/>
<!-- Content -->
<content>
<fontName="Arial" size="11"/>
</content>
如何仅为<!-- Header -->
替换fontName和size?
这是我的替换代码
public class StringReplacement {
public static void main(String args[])
{
try
{
File file = new File("file.xml");
BufferedReader reader = new BufferedReader(new FileReader(file));
String line = "", oldtext = "";
while((line = reader.readLine()) != null)
{
oldtext += line + "\r\n";
}
reader.close();
// replace a word in a file
//String newtext = oldtext.replaceAll("drink", "Love");
//To replace a line in a file
String newtext = oldtext.replaceAll("Arial", "Times New Roman");
FileWriter writer = new FileWriter("file.xml");
writer.write(newtext);
writer.close();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
但它只是替换了所有要替换的文本。
答案 0 :(得分:2)
如果您确定这是文件的格式,您只需执行以下操作:
String newtext = oldtext.replaceAll("header fontName=\"Arial\"", "header fontName=\"Times New Roman\"");
顺便使用StringBuilder
附加字符串。
答案 1 :(得分:1)
在您的阅读循环while((line = reader.readLine()) != null)
中,您可以测试是否找到<!-- Header -->
行(而不是<!-- Content -->
行),并仅在标题栏中进行替换。
boolean inHeader == false;
while((line = reader.readLine()) != null) {
if (line.equals("<!-- Header -->")) {
inHeader = true;
} else if (line.equals("<!-- Content -->")) {
inHeader = false;
}
if (inHeader) {
line = line.replaceAll("Arial", "Times New Roman");
}
oldtext += line + "\r\n";
}
删除该行
String newtext = oldtext.replaceAll("Arial", "Times New Roman");
编辑:检测任意标签而不是硬编码标头和内容可能会更清晰。这需要一个正则表达式来匹配<!-- (tag) -->
并测试tag是否等于"Header"
,但这种方法当然更容易。