0

尝试替换文件中的字符串时遇到问题。在我的文件中,我有:

<!-- Header -->
<header fontName="Arial" size="24"/>
<!-- Content -->
<content>
    <fontName="Arial" size="11"/>
</content>

如何仅替换 fontName 和 size <!-- Header -->
这是我的替换代码

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();
         }
     }
}

但它只是替换所有要替换的文本。

4

2 回答 2

2

如果您确定这是文件的格式,您可以简单地执行以下操作:

String newtext = oldtext.replaceAll("header fontName=\"Arial\"", "header fontName=\"Times New Roman\"");

顺便说一句,使用 aStringBuilder来附加字符串。

于 2013-03-27T09:09:18.500 回答
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",但这种方法当然更容易。

于 2013-03-27T09:12:03.190 回答