2012-01-07 7 views
2

を使用してテキストファイル内の重複する番号を特定するここでは、テキストファイルに繰り返し番号を示すコードを書いています。ここでは、テキストファイルには各行に整数だけが含まれていると仮定しました。あなたが今見ているように、それはテキストファイルに繰り返し整数を示しています。ハッシュセット

テキストファイルのパス名をハードコードしました。

ここでは、2つのハッシュセットを使用して実装しました。ハッシュセットを1つだけ使用してもかまいませんか? 1つのハッシュセットだけを使用して同じものを実装する方法を教えてください。

import java.io.*; 
import java.util.*; 

パブリッククラスFileRead関数{

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    HashSet <String> uniquelines=new HashSet<String>(); 
    HashSet<String>duplicatelines=new HashSet<String>(); 


    try{ 
     FileInputStream fstream=new FileInputStream("C:/Users/LENOVO/Desktop/txt.txt"); 
     DataInputStream in=new DataInputStream(fstream); 
     BufferedReader br=new BufferedReader(new InputStreamReader(in)); 
     ArrayList arr=new ArrayList(); 
     String str; 
     while((str=br.readLine())!=null){ 
      if(uniquelines.contains(str)){ 
       if(!duplicatelines.contains(str)){ 
        duplicatelines.add(str); 
        System.out.println(str); 
       } 
      } 
      else{ 
       uniquelines.add(str); 
      } 
     } 
     in.close(); 
    }catch(Exception e){ 
     System.out.println(e); 
    } 

} 

} 
+0

インポートにワイルドカード(。*)を使用しないでください。使用するクラスだけをインポートする –

+0

重複する行を特定するために単一のハッシュセットを使用できるとは思われません。 @ JB Nizetが指摘するように、ハッシュテーブルを使用する必要があります。 HashSet "はセットの反復順序に関して保証しません。"ソート可能なコレクションを使用した場合は、コレクションをソートしてからposition +(position + 1)を比較して重複を判別できます。これは、HashMapを使用するほど優雅ではありません。 – XanderLynn

答えて

3

既存の機能を維持するためには、私はあなたが単一のHashSetを使用することができますどのように表示されません。ただし、キーが行になる単一のHashMapを使用し、値はファイル内の行の出現回数になります。

サイドノート:

  • ストリーム、読者と作家は常にfinallyブロックで閉じる必要があります。
  • arr変数は有用ではありません。
+0

フェアポイントしかし、OPのポストからは、ハッシュセットが使用される予定であることが分かりません。 –

1

ユニークラインに既に文字列が含まれているかどうかを確認する必要はありません。とにかく追加するだけです。ハッシュセット自体がチェックを行い重複を許可しません。 下記のコードを参照してください...

重複を何回か印刷することは気にしないでください(重複を何度も印刷することはありませんか?下のコードは....ですが、そうした場合、前に見つけた重複を追跡せずに行うことはできません。したがって、2つのセットが必要になります...

関連する問題