从文本文件替换特定的字符串

时间:2012-03-13 15:49:17

标签: java regex string

我正在尝试从给定的文本文件中替换某个String的出现。这是我写的代码:

BufferedReader tempFileReader = new BufferedReader(new InputStreamReader(new FileInputStream(tempFile)));
File tempFileBuiltForUse = new File("C:\\testing\\anotherTempFile.txt");
Writer changer = new BufferedWriter(new FileWriter(tempFileBuiltForUse));
String lineContents ;
while( (lineContents = tempFileReader.readLine()) != null)
{
    Pattern pattern = Pattern.compile("/.");
    Matcher matcher = pattern.matcher(lineContents);
    String lineByLine = null;
    while(matcher.find())
    {
        lineByLine = lineContents.replaceAll(matcher.group(),System.getProperty("line.separator"));
        changer.write(lineByLine);
    }
}
changer.close();
tempFileReader.close();

假设我tempFile的内容是:

This/DT is/VBZ a/DT sample/NN text/NN ./. 

我希望anotherTempFile包含:

This/DT is/VBZ a/DT sample/NN text/NN . 用新的一行。

但我没有得到理想的输出。而且我无法看到我出错的地方。 :-( 请帮助。 : - )

4 个答案:

答案 0 :(得分:3)

点表示正则表达式中的“每个字符”。试着逃避它:

Pattern pattern = Pattern.compile("\\./\\.");

(你需要两个后退,以逃避String中的反斜杠本身,以便Java知道你想要一个反斜杠而不是一个特殊字符作为换行符,例如\n

答案 1 :(得分:2)

在正则表达式中,点(.)匹配任何字符(换行符除外),因此如果您希望它与文字点匹配,则需要对其进行转义。此外,您似乎缺少正则表达式中的第一个点,因为您希望模式与./.匹配:

Pattern pattern = Pattern.compile("\\./\\.");

答案 2 :(得分:2)

您的正则表达式有问题。此外,您不必使用模式和匹配器。只需使用String类的replaceAll()方法进行替换。这会更容易。请尝试以下代码:

        tempFileReader = new BufferedReader(
                new InputStreamReader(new FileInputStream("c:\\test.txt")));
        File tempFileBuiltForUse = new File("C:\\anotherTempFile.txt");
        Writer changer = new BufferedWriter(new FileWriter(tempFileBuiltForUse));
        String lineContents;
        while ((lineContents = tempFileReader.readLine()) != null) {
            String lineByLine = lineContents.replaceAll("\\./\\.", System.getProperty("line.separator"));
            changer.write(lineByLine);
        }
        changer.close();
        tempFileReader.close();

答案 3 :(得分:1)

/.是正则表达式\[any-symbol]。 转到`/\\.'