2012-04-13 1 views
0

私は特にディレクトリのセットを持っています。ファイルから単語を取り出すための正規表現

ディレクトリ内のすべてのファイル(テキストファイル)から内容を取得した後、私は ストリングのリストを持っています。

各文字列要素は、各ファイルから取得されたコンテンツを表します。したがって、リストの最初のString要素は、最初のファイルの内容を表します。

ここで、単語を取得するために文字列を分割したい(後で単語が文字列の配列に格納される) 1)単語は単一のスペース/複数のスペースで区切ることができます。 2)文は '。'で終わります。したがって、 '。'の後ろに新しい単語を入れることができます。 3) '\ n'の後ろに新しい単語を書くことができます

誰もがsplit()メソッドに適合する正規表現を提案できますか?

+0

これはおそらく非常に似て質問です:http://stackoverflow.com/questions/2159026/regex-how-to-get-words-from-a-string-c – wlk

+0

しかし、それは、C#でだ、ではありませんでJava –

答えて

0

これには正規表現は必要ありません。すべての文字以外の文字をファイルから削除し、Tokenizerを使用して各単語を読み込むだけです。

+0

'-'は文字以外の文字です。削除する必要があるようには見えません。また、文字以外の文字をすべて削除すると、本当に長い単語が1つだけ表示されます。 –

+0

私は各要素が個々のファイルの内容を表す文字列のリストとしてファイルの内容を取り出しました。 split()メソッドでデリミタを使用すると、デリミタの代わりに何を置き換えるべきですか? –

+0

@ジョンB、Wojtekはおそらく、文字以外の文字の検出によって単語を追跡するように指示していたでしょう。 –

4

おそらく、StringTokenizerクラスがあなたのニーズに適しています。コンストラクタは文字列をtokenizeに、区切り文字のリスト(あなたの場合は:space、。、および改行)を取ります。

+0

'StringTokenizer' javadocsによると:' StringTokenizerは互換性のために保持されるレガシークラスですが、新しいコードでの使用は推奨されません。この機能を求めている人は、SplitメソッドのStringまたはjava.util.regexパッケージを代わりに使用することをお勧めします。 –

-1

私はこのためにトークンを使用することをお勧めします...それぞれのキャラクターに行き、そのキャラクターに基づいて何をすべきかを決めるだけです。ここで擬似コード

string word = ""; 

while (EOF){ 

    char = getNextChar() 

    if (char not space or full-stop){ 
     append the char to the word 
    } 
    else { 
     if (the word is empty){ continue /* ignore multi space */ } 
     else { 
      add the word to an array of words 
      reset the word to "" 
     } 
    } 
} 

この方法だ、あなたがデータを処理する方法を完全に制御を持っている - あなたは正規表現のルールに含めると夢中にシナリオを心配する必要はありません。何よりも、これは最も効率的な方法です(正規表現よりも優れています)、データを1回だけ通過させます。

+0

これを行うためのツールはすでにたくさんあります。私は車輪の再発明を奨励しません。 –

1
String[] result = myString.split("[\\.\\s]"); 
関連する問題