2016-05-31 6 views
-3

$ @%のような特殊文字を含むファイルを読んでいる状況があります。スペースと共に。例えば:java - 出力に特殊文字とスペースを出力する

I_am_here !!!本当に、__ am_I_here?

上記の文字列では、複数のスペース(前の2つのようなもの)と特殊文字に遭遇できることを示すために、アンダースコアでスペースを表示しています。ですから、私は視覚的補助として_を使用しています。実際のファイルでは、実際にはスペースまたは複数のスペースです。

このファイルを入力から読み取って、それをどのように追跡することができますか。特殊文字とスペースを分離し、読み込んだ単語とともに出力に出力することは可能ですか?要するに、プログラムが読む単語を変更しながら、特殊文字やスペースを保存したいと思う。

たとえば、入力文字列:

I_am_here !!!本当に、__ am_I_here?

は次のようになります。

I_am_here !!!本当に、__ 2_I_2?

ここでは、複数回出現する単語を数え、元の入力で発生したスペースと特殊文字とともに出力を出力します。 Javaでこれをどうやって行うことができますか?ありがとう

+1

はどのようにあなたの書かれたコードは次のように見えますか? –

+1

ファイルからの読み込みとregexの使用について何か試しましたか?あなたが今までにしてきたことをより良くすることを示しています。 – jcool

+0

*「このファイルを入力からどのように読み取ることができますか?」*テキストファイルを読むのと同じ方法:['FileReader'](https://docs.oracle.com/javase/7/docs/api/java/ io/FileReader.html)、おそらく['BufferedReader'](https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html)でラップして、[' readLine() ']](https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine%28%29)。 – Andreas

答えて

0

文字列内の単語を検索するには、正規表現を使用するのが一番簡単です。正規表現\p{L}+は、1つ以上のUnicode文字のシーケンスを検索します。

単語が見つかるまでわからない値で置き換えるには、MatcherappendReplacement()appendTail()の方法を使用して単語を検索します。

以前に単語が何回見られたかをカウントする場合は、Map<String, Integer>を使用して、既に見られた単語のマップと、これまでに見られた回数のカウントを維持できます。

これは、それがどのように動作するかです:

String input = "I am here!!! really, am I here? Why, yes I really am!"; 

Map<String, Integer> wordCount = new HashMap<>(); 
StringBuffer buf = new StringBuffer(); 
Matcher m = Pattern.compile("\\p{L}+").matcher(input); 
while (m.find()) { 
    String word = m.group(); 
    Integer count = wordCount.get(word); 
    if (count == null) 
     wordCount.put(word, 1); 
    else { 
     wordCount.put(word, ++count); 
     m.appendReplacement(buf, count.toString()); 
    } 
} 
String output = m.appendTail(buf).toString(); 

System.out.println(input); 
System.out.println(output); 

OUTPUT

I am here!!! really, am I here? Why, yes I really am! 
I am here!!! really, 2 2 2? Why, yes 3 2 3! 
関連する問題