2012-03-13 81 views
0

我试图从给定的文本文件中替换某个字符串的出现。下面是我写的代码:从文本文件中替换特定的字符串

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 . 用一个新行。

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

回答

3

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

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

(您需要两个backslahes,为了躲避字符串中的反斜杠本身,这样的Java知道你想有一个反斜杠,而不是一个特殊字符作为换行符,如\n

+0

好多了。但是现在,生成的输出是换行符中的每个单词。仍然不是我想要的。 – 2012-03-13 16:01:42

+0

我改正了我的建议,所以它只匹配'./。' – devsnd 2012-03-13 16:06:54

+0

只需稍作修改,即可匹配的模式。只是'/ .'它会和你以前的建议一样吗? – 2012-03-13 16:09:24

2

在一个正则表达式,点(.)匹配任何字符(除换行符),所以它需要进行转义,如果你希望它匹配一个点。另外,你似乎缺少在第一点你正则表达式,因为你想模式匹配./.

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

真的很抱歉。 :-) – 2012-03-13 16:10:04

1

/.是一个正则表达式\[any-symbol]。 切换到`/ \\'。

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