2017-05-03 2 views
1

私のメソッドはファイルを読み込んで印刷しますが、各単語をArrayList dictに追加する際に問題があります。テキストファイル(約90,000語)を読み込み、各単語を文字列のArrayListに追加しようとしています

読者がファイルを一度に1つずつ読み込むので、書いたものはdictに[char、dog]が必要なときに[c、a、t、d、o、g]にそれぞれの文字を追加します。テキストファイルには、それぞれの行に単語があります。どのように私はそれらを区別することができますか?これまで

マイコード:

public static List Dictionary() { 
    ArrayList <String> dict = new ArrayList <String>(); 

    File inFile = new File("C:/Users/Aidan/Desktop/fua.txt"); 
    FileReader ins = null; 

    try { 
     ins = new FileReader(inFile); 

     int ch; 

     while ((ch = ins.read()) != -1) { 
      System.out.print((char) ch); 

      dict.add((char) ch + ""); 
     } 
    } catch (Exception e) { 
     System.out.println(e); 
    } finally { 
     try { 
      ins.close(); 
     } catch (Exception e) { 
     } 
    } 
    return dict; 
} 
+0

この問題を解決するための良い例とアプローチがあるとします。次の[post](https://www.mkyong.com/java/how-to-read-file-from-java-bufferedreader-example/)を参照してください。 –

答えて

0

の代わりにDictionary(クラス名のように見えます)のJava命名規則を遵守してください。次に、fileNameをメソッドに渡します(メソッドのパスをハードコーディングするのではなく)。ホイールを改造する代わりにScannerを使用します。ここでfinallyの代わりにtry-with-resources(およびダイヤモンド演算子)を使用することもできます。同様に、また

public static List<String> readDictionary(String fileName) { 
    List<String> dict = new ArrayList<>(); 

    try (Scanner scan = new Scanner(new File(fileName))) { 
     while (scan.hasNext()) { 
      dict.add(scan.next()); 
     } 
    } catch (Exception e) { 
     System.out.printf("Caught Exception: %s%n", e.getMessage()); 
     e.printStackTrace(); 
    } 
    return dict; 
} 

BufferedReadersplit各単語を自分で使用しています。

public static List<String> readDictionary(String fileName) { 
    List<String> dict = new ArrayList<>(); 

    try (BufferedReader br = new BufferedReader(new FileReader(
       new File(fileName)))) { 
     String line; 
     while ((line = br.readLine()) != null) { 
      if (!line.isEmpty()) { 
       Stream.of(line.split("\\s+")) 
         .forEachOrdered(word -> dict.add(word)); 
      } 
     } 
    } catch (Exception e) { 
     System.out.printf("Caught Exception: %s%n", e.getMessage()); 
     e.printStackTrace(); 
    } 
    return dict; 
} 

、同様しかし、それは基本的に最初の例が何をするかです。

0

チェックアウトファイルから単語を取得するためにスキャナを使用する方法を示し、ここでの答え:Read next word in java

単語を印刷する代わりに、それらをArrayListに追加したいと思うでしょう。その後、私はあなたがファイルを読むためにScannerを使うことをお勧め、FileReaderread方法として

0

は一度に単一の文字を読むことができますし、それはあなたが望むものではないです。

ArrayList<String> dict = new ArrayList<>(); 
Scanner scanner = new Scanner(new File("C:/Users/Aidan/Desktop/fua.txt")); 
while(scanner.hasNext()){ 
    dict.add(scanner.next()); 
} 
0

あなたがラップすることができますあなたの時間で全体のライン(ワード)を取得しますreadLine()方法を持っているBufferedReader、中FileReaderreadLine()は、読み取る行がなくなるとnullを返します。

関連する問題