2012-02-22 11 views
0

私は、ファイル内でこのような文字列Javaの文字列置換

<script> 
Evening</script> 

を持っている私は、この文字列を置換するためのコードを書かれているが、それは、私は、電子を改行文字 を識別していません。

<h1>Done</h1> 

コードは次のようになります::

package stringreplace; 
import java.io.*; 

import org.omg.CORBA.Request; 

public class stringreplace { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     FileReader fr = null; 
     BufferedReader br = null; 

     try 
     { 
      fr = new FileReader("G://abc.html"); 
      br = new BufferedReader(fr); 

      String newtext=""; 
      String line=""; 

      String matchExist1 = "<script>\r\nEvening</script>"; 
      String newpattern = "<h1>Done</h1>"; 

      String matchExist2 = "</body>"; 
      String newpattern2 = "<script>alpha</script></body>"; 

      StringBuffer sb = new StringBuffer(); 

      while((line=br.readLine())!=null) 
      { 
       int ind2 = line.indexOf(matchExist1); 
       System.out.println(ind2); 
       int ind3 = line.indexOf(matchExist2); 
       if((ind2==-1) || (ind3==-1)) 
       { 
        line = line.replaceFirst(matchExist1,newpattern); 
        line = line.replaceFirst(matchExist2,newpattern2); 
        sb.append(line+"\n"); 
       } 
       //sb.append(line+"\n"); 
       else if((ind2!=-1) || (ind3!=-1)) 
       { 
        String tag = "</body>"; 
        line = line.replaceFirst("</body>",tag); 
        sb.append(line+"\n"); 
       } 
      } 
      br.close(); 

      FileWriter fw = new FileWriter("G://abc.html"); 
      fw.write(sb.toString()); 
      fw.close(); 

      System.out.println("done"); 
      System.out.println(sb); 

     } 
    catch (Exception e) 
     { 
     System.out.println(e); 
     } 

    } 

} 

をしかし、それは改行文字を識別していない私は上記の文字列を置換します。

+2

やや接する - HTMLを解析しようとしているだけの場合、なぜXMLパーサ(XHTMLを提供)を使用できないのですか?私の経験上、HTMLのための良い正規表現ベースのパーサーを書くことは時間の価値がありません。 – Pavan

+0

あなたは確かですか?それは単なる "\ n"だけでなく、 "\ r \ n"ですか? – Hachi

+0

Pavanが言及したように、私の経験では、jsoup.orgをお勧めします。 –

答えて

1

あなたの改行がどのように見えるかわからないと思います。だから私は特定のシーケンスの代わりに\s+を使用します。少なくとも1つの空白文字であり、すべての改行文字が含まれています。

String matchExist1 = "<script>\\s+Evening</script>"; 

編集:もちろん
、あなたは(1)説明した第一の問題MGCで修正する必要があります。そして、あなたは私の答えを利用することができます!

+0

line.indexOf(matchExist1)は正規表現 – Hachi

3

一度に1つの入力行だけを読み込んでいるので、2行にまたがるパターンに一致することはほとんどありません。最初に読み込みを修正して、少なくとも2行を入力する必要があります。 @ sternaの答えがそのトリックを行います

+2

+1で一致しません。しかし、 'Mutliline'フラグの部分は間違っています。'^'と' $ 'アンカーの振る舞いを変えるだけです。おそらくあなたが意味していたのは、[DOTALL](http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html#DOTALL)フラグであり、ドットも一致します改行文字。しかし、これも彼の問題ではない。 – stema

+0

あなたが正しいです、私はそれを編集します – mac