2016-04-09 21 views
0

ファイルのすべての単語をHashSetに配置する方法を理解しようとしています。私が書いている方法は、ファイルを読んで、そのファイルにある単語をHashSetとして返すべきです。私もsplit()メソッドを使用する必要がありますが、それを使用する方法を理解することはできません。また、すべての単語を小文字に変換するnormalize()メソッドもあります。これは私が得た距離です:文書の単語をJavaのHashSetに抽出する

public static HashSet<String> extractWordsFromDocument(String filename) { 
    try { 
     FileReader in = new FileReader(filename); 
     Scanner file = new Scanner(in); 
     while(file.hasNext()){ 
     try { 
      String line = file.nextLine(); 
      line = line.normalize(); 
      line = line.split(); 
      Set<String> words = new HashSet<String>(); 
      hashset.add(line); 
      System.out.println(words); 
     } 
     catch (Exception e) { 
     } 
     } 
    } 
    catch (FileNotFoundException e) { 
     System.out.println("Working Directory = " + System.getProperty("user.dir")); 
    } 
    return null; 
    } 

このコードには多くの間違いがあります。私はちょうど初心者です...

+0

あなたはスプリット()メソッドが何を思いますか?あなたは知らないようです。解決策はjavadocを読み込むことです。 http://docs.oracle.com/javase/8/docs/api/java/lang/String.htmlまた、すべての行*に対して新しいHashSetを作成しています。そしてこのセットの内容をすべての行に印刷する*。 HashSetはループの前に作成し、ループの後に返す必要があります。メソッドは現在、常にnullを返します。また、例外のキャッチを停止します。 throws節でIOExceptionを宣言します。 –

+0

ああ、Stringはnormalize()メソッドがどこにあったのですか?再度、javadocを読んでください。その方法は存在しません。 –

+0

@JBNizetええ、単語を小文字に変換するnormalize()というヘルパーメソッドがあることを忘れていました – Christine

答えて

0

ループ内にHashSetを作成すると、ファイル内の各行に新しい単語があり、それぞれにその単語の単語のみが含まれます。

また、next()メソッドを持つScannerを使用すると、空白(スペース、タブ、行末など)で区切られた単語をデフォルトの区切り文字で区切ることができます。

あなたのリソースを閉じてください。 Java 7からは、try-with-resources statementを使用できます。

また、don'tswallowexceptionsです。

public static Set<String> extractWordsFromDocument(String filename) throws IOException { 
    try (Reader in = new FileReader(filename)) { 
     Set<String> words = new HashSet<>(); 
     Scanner scanner = new Scanner(in); 
     while (scanner.hasNext()){ 
      words.add(scanner.next()); 
     } 
     return words; 
    } 
} 

あなたはどのようにStringsplit()作品、read the docsをお知りになりたい場合は...

関連する問題