2012-02-29 19 views
1

さまざまなソートアルゴリズムの効率を比較するために、別の辞書テキストファイル(たとえばA)でテキストファイル(たとえばB)内の単語を検索するプログラムを作成しています。Java - テキストファイルから特殊文字を読み取ることができない

私の問題は、これらのソーステキストファイルのいずれかに「μ」などの特殊文字が含まれている場合です。まず、このような文字を含むテキストファイルをWindowsに保存するには、エンコードをANSIからUTF-8のようなものに変更する必要があるとメモ帳で言います。

特殊文字を含む行があると、プログラムがクラッシュします。具体的には、この単語がcompareToメソッドを使用して他の辞書テキストファイル内の単語と比較される時点です。それはNullPointerExceptionでクラッシュします。

「μ」が「Âμ」と表示され、奇妙な文字が常に第1行に表示されていることを確認するために特殊文字が印刷されています(「」)。私は特殊文字を読んでいましたか、私も

一般に

FileReaderのを試してみました

inputStream = new Scanner (new FileInputStream(args[0])); 

、または単語は特殊文字を含む:

は、私は、ファイル入力用のスキャナを使用していますか?これらの文字は、組み込みのcompareToメソッドと互換性があるか、それらを注文する別の方法を見つける必要がありますか?

+0

コードが少なすぎると思われます。 (arg [0]はパブリッシュ静的void main(String [] args)のパラメータのように見えます)あなたのプログラムをパラメータで呼びますか? –

+0

はい、args [0]はファイル名 – user929404

答えて

4

ANSIエンコーディングはありません。ASCIIのみです。 Notepad ++を使用して、正しいUTF-8エンコードファイルを作成します。コードを取り込むreaderでJavaでファイルを開きます。

+0

です。市場に応じて「任意の入力を使用して」テストされる。私はテキストファイルをどのように保存するかについては何も制御していません。私は、入力テキストファイルに特殊文字を入れることにした場合にどうなるかについて心配しています。しかし、一般的に、特殊文字を読むにはどうすればいいですか? – user929404

+0

エンコーディングがわからない場合はできません。あなたが行うことができるのは、ICU4Jを使ってエンコーディングを推測することだけです。それ以外は**失敗するでしょう。 –

+0

あなたはメモ帳++について正解でした。私はNotepad ++を使ってテキストファイルを作成し、プログラムはもはやクラッシュしません。ただし、これらの文字は「?」と表示されています。私はjGraspを使用しています。もし使用しているのであれば – user929404

2

はがバイナリバイトデータのためのものである

inputStream = new Scanner(new FileInputStream(args[0]), "UTF-8"); 

または

BufferedReader in = new BufferedReader(
     new InputStreamReader(new FileInputStream(args[0]), "UTF-8")); 

いるInputStreamsを行い、読者は彼らのエンコーディングで文字の上にあります。

テキストの前に「BOM」文字があり、テキストをUTF-8としてマークするゼロ幅のスペースがあるようです。これは削除されている可能性がありますが、WindowsはUTF-8を認識しません。スキャナーでスキップすることができます。

+0

あなたが言ったようにスキャナを作成しようとしましたが、前と同じエラーが表示されました – user929404

+0

BOMをUTF-8でエンコードしたファイルに追加するのはよくある誤解です。 UTF-8はバイトオーダーに依存しないため、BOMはここにあります(推奨されません)(http://en.wikipedia.org/wiki/Byte_order_mark#UTF-8)。 JavaはデフォルトでBOMを追加しません。 –

+0

私もBufferedReaderを試しましたが、ライン辞書[position] .compareTo(searchTerm)<0に同じエラーがありました。ここで、searchTermは特殊文字を含む文字列です。このプログラムは非特殊文字入力のために動作します – user929404

関連する問題