Java正则表达式用新值替换值

时间:2013-01-11 16:11:16

标签: java regex

如何让正则表达式获取文件中 name = 之后的值,并替换它。 我有一个名为'myfile.txt'的文件。

public static void main(String[] args)
    File TextFile = new File("C:\\text.txt");
    if (TextFile.exists()) {
        try {
            ReplaceWordInFile(TextFile, "haical", "arnanda");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

private static void ReplaceWordInFile(File MyFile, String OldText, String NewText)
        throws IOException {

    File tempFile = File.createTempFile("filetemp", ".tmp");
    FileWriter fw = new FileWriter(tempFile);

    Reader fr = new FileReader(MyFile);
    BufferedReader br = new BufferedReader(fr);

    while (br.ready()) {
        fw.write(br.readLine().replaceAll(OldText, NewText) + "\n");
    }

    fw.close();
    br.close();
    fr.close();
    tempFile.renameTo(MyFile);
}

文件C:\ text.txt的内容为:

name = haical
address = Michigan 48309, Amerika Serikat
age = 19
gender = male
activity = school
hoby = hiking, travel

如果我在第一行运行上面的程序,name = haical将更改为name = arnanda。

我的问题是name的值不是'haical'而是另一个值,所以我希望在 name = blablabla 之后得到这个值。

此外,有时声明name = haical不会保留空格数和空格数。改变立场。

稍后输出内容的示例是:

address = Michigan 48309, Amerika Serikat
name   =    haical  
age = 19
gender = male
activity = school
hoby = hiking, travel

所以它并不总是在=之后的第一行和一些空格,但它始终以 name = 开头。

提前致谢。

1 个答案:

答案 0 :(得分:1)

使用

....replaceAll("^name\\s*=\\s*" + YourNameVariableToReplace + "\\s*$", "name="+YourNameVariableToInsert)

替换字符串。如果他可能包含Regex-Control-Chars,也许你需要逃避Name First。