24357


Aizu
Onlineジャッジの問題で、単語W、複数行にまたがった文章(END_OF_TEXTまで)が与えられており、文章のうち単語Wに一致するものの個数を出力せよ、という問題があるのですが、解けません。

以下のように`replaceAll`を使って解こうと思ったのですが、  
`text=text.replaceAll(".", " ");`  
では`.`が取り除けていないのか、textが空行になってしまいます。

どこが間違っているのでしょうか。

[code]

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    
    
    
    public class test{
        public static void main(String[] args){
    
            BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
    
            try{
                String W=reader.readLine().toLowerCase();
                String text="";
    
            while(true){
            String p=reader.readLine();
            if(p.equals("END_OF_TEXT"))break;
            text+=p.toLowerCase();
            }
    
            System.out.println(text);
    
            text=text.replaceAll(".", " ");
            System.out.println(text);
    
            String[] array_text=text.split(" ");
            int count=0;
            for(int i=0;i<array_text.length;i++){
                System.out.println(array_text[i]);
    
                if(array_text[i].equals(W)){
                    count++;
                }
            }
    
            System.out.println(count);
            //splitでは「.」を区切り文字として読み込めていない。
    
    
            }catch(IOException e){
                System.out.print(e);
            }
        }
    
    }
    
[/code]


CC BY-SA 3.0
2016-04-26T08:21:11.530
24355
2016-04-27T12:11:10.530
2016-04-27T12:11:10.530
2238
15279
question
java
JavaのString replaceAll(String regex, String replacement)について


`replaceAll` の最初の引数は正規表現パターンを指定します。  
`.`（ピリオド）は、一文字を表すパターンですのでピリオドの文字自体を表す場合には（パターンの指定ではないと報せて）エスケープさせる必要があります。  
それには、ピリオドの前にエスケープ文字`\`(日本では円記号）を置きます。  
この場合`"."`を`"\\."`のようにします。  
２重に指定するのは文字列中の`\`(が特別な機能(文字列中でのエスケープ)を有する)をエスケープさせるためです。  
`"\\."`は、`\.`の文字列として解釈されます。それが、(ピリオド自体を表す)パターンとして渡されます。


CC BY-SA 3.0
2016-04-26T08:41:21.213
24357
2016-04-26T08:41:21.213
5044
24355
answer