2012-03-13 23 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("\\./\\."); 

Javaはあなたがバックスラッシュではなく改行文字などの特殊文字を持つようにしたい知っているように、(あなたは、文字列内のバックスラッシュ自体をエスケープするために、2 backslahesを必要とし、例えば\n

正規表現で
+0

さらに優れています。しかし、生成される出力は、改行のすべての単語です。まだ私が望むものではありません。 –

+0

私は提案を訂正して、 './ 'にマッチするようにしました。 – devsnd

+0

パターンを照合するだけのマイナーな編集です。 '/'のためだけにあなたが前に提案したものと同じでしょう? –

2

、ドット(.)は(改行を除く)任意の文字にマッチしますので、あなたはそれが文字通りのドットを一致させたい場合には、エスケープする必要があります。また、あなたはあなたの最初のドットが欠落しているように見えますあなたがパターンを一致させたいので、正規表現は./.

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

本当に申し訳ありません。 :-) –

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(); 
関連する問題