2016-04-03 3 views
1

私は学校のための大きなデータ割り当てに取り組んでおり、自分のコードを動作させるために、テキストファイルから単語をフィルタリングする必要があります。まれな空白がなくてもJavaフィルタワードがファイル外に出る

私はファイルを読み、replaceAll( "[^ a-zA-Z0-9]"、 "");

しかし、これは問題を引き起こします。私は、スペースでフィルタリングし、いくつかの特別な例は次のようにありますので:

wobbewy!'--'Wobbewy,' 

私が手のような言葉:

wobbewywobbewy 

のようなスペース上の単語をフィルタリングしてもすることなく、これらの特別な場合を除外するためにとにかくありif文の膨大な量ですか? (複数のスペース)私の

+1

「[^ a-zA-Z0-9]」、「」)を使用しない理由は、 ' - 'はスペースで置き換えられ、スペース文字で分割すると機能します。代わりに:何も置き換えずに、\ w +パターンを使って正規表現を使って単語を検索してください。 – kevcodez

+0

言うまでもなく、単語を区切るために空白を使用しない言語を扱うときには、この問題全体がさらに悪化します。テキストのブロックを単語に分割するだけの言語(タイ語、IIRC?)では、辞書と再帰的なバックトラックアルゴリズムが必要です。 –

答えて

0

スプリットので、「非単語」文字で分割、入力を消費:私は1つの単語として扱われ「ない」のような言葉を聞かせてなる、維持するために文字にアポストロフィを追加

String[] woord = thisLine.trim().split("[^a-zA-Z0-9']+"); 

お知らせ。

1

特殊文字を削除し、あなたの情報

XXV:私が好きoutpuit取得後

while ((thisLine = bufferedReader.readLine()) != null) { 
     String[] woord = thisLine.toString().trim().split("\\s+"); 
     for(int i=0; i<woord.length; i++){ 
      normalWord = woord[i].replaceAll("[^a-zA-Z]+", " "); 
      normalWord = normalWord.toLowerCase(); 

:私は修正を試みた後に何が起こっているかの

サンプルコード単語の境界については失われます。

変更replaceAll("[^a-zA-Z0-9]", "");replaceAll("([^a-zA-Z0-9]|\s)+", " ");(特殊文字と空白を1つのスペースに置き換えます)。

+0

これは、OPの例では5つのスペースを作成します。私は '' [^ a-zA-Z0-9] + ''を好んで、スペースで分割します。 – nyname00

+0

nyname00 @私は=仕事とエラーになりますしません。この例で私の答え – slartidan

+0

を更新) はしかし、私かもしれないがどのようにこの作品は、次のシナリオでする?: しばらく((thisLine =はBufferedReader.readLine())! = null){ \t String [] woord = thisLine.toString()。trim()。replaceAll( "([zA-Z0-9] | \\ s)+"、 ""); { \t \t normalWord = woord [I] \t \t normalWord = normalWord.toLowerCase()(; iがwoord.lengthを Tvt

関連する問題