2

Javaで読み取る辞書ファイルがいくつかあり、それらを1行ずつ読み取るときに、次のコードを使用します。

       public static void main(String args[]) { 


    try {

        FileInputStream fstream1 = new FileInputStream("de-DE.dic");
                    DataInputStream in = new DataInputStream(fstream1);
                BufferedReader br = new BufferedReader(new InputStreamReader(in,"UTF-8"));

      String str;
      while ((str = br.readLine()) != null) {
         String str_uc=str.toUpperCase(Locale.GERMAN);
          if(hasApostrophe(str_uc)){
              allletters.add(str_uc);
          if(str.length()==3)
              threeletter.add(str_uc);
          else if(str.length()==4)
              fourletter.add(str_uc);
          else if(str.length()==5)
              fiveletter.add(str_uc);
          else if(str.length()==6)
              sixletter.add(str_uc);
          else if(str.length()==7)
              sevenletter.add(str_uc);
       }
      }
      in.close();

    }
    catch (Exception e) {
      System.err.println(e);
    }

ただし、常に最初の行の単語に1つの空の文字が追加されます。たとえば、3文字の単語が最初の行にある場合は、4文字の配列に追加されます。どうすればこれを防ぐことができますか?ありがとう。

添加:

ファイルの数行を次に示します。

Aachens
Aachen
Aal
Aale
Aalen
Aales
Aals
Aas
Aases
Aasgeier
Aasgeiern
Aasgeiers
4

3 に答える 3

1

おそらく正しい修正

Javaには2種類のストリームがあります。

バイナリストリーム-これらはあらゆる種類のデータを読み取ることができますが、データを読み取るには、それがどのような種類であるかを知る必要があります

テキストストリーム-ここでは、テキストを読んでいることに同意します

あなたがしているのはFileInputStream、バイナリストリームの形式であるaを開き、次にそれをBufferedReaderで装飾することです。これは、最初にdataInputStreamによって装飾されます。

より正しいアプローチは、最初にFileReaderを開いてから、BufferedReaderで(必要な場合にのみ)それをBufferedReaderで装飾することです。

FileReader用のJAVAAPIを参照してください

FileReaderに切り替えると、「予期しない」問題が解決されます(これは、文字列をバイナリ形式で保存していると思ったときにファイルから文字列を読み取る方法が原因です。つまり、DataInputはこれらの文字の「表示」を読み取ることを期待しています。実際の文字列の前の文字列です)

クイックフィックス また、切り替えたくない場合は、いつでもStringクラスのtrimメソッドを呼び出すことができます。

別のクイックフィックス

開いているすべてのストリームの代わりにスキャナーを使用します。スキャナーはファイル名パラメーターを受け入れてファイルを開きます。スキャナーのnext()メソッドを使用でき、非常に高度な解析機能を備えています。スキャナーを参照してください。

于 2012-07-06T10:43:00.017 に答える
0

編集:そのメモ帳の問題。これを読む

使用する

String str_uc=str.trim().toUpperCase(Locale.GERMAN);

Trim()は、行の先頭または末尾の空白文字を削除します。

于 2012-07-06T10:50:05.343 に答える
0

PCの回答によると、ファイルエンコーディングをNotepad++で次のように変換することをお勧めします。

于 2017-04-16T23:11:36.093 に答える