2012-03-13 94 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(); 
相關問題