0

次の問題があります。

さまざまなパラメーターに応じて、hashSet 内の大量のタブ区切り値ファイル (「元のファイル」) から列を解析しています。一度解析して、単純化されたファイル (「解析結果」) として書き込みます。毎回すべてを再分割/フィルター処理する必要はありませんが、「解析結果」ファイルを読み取ってから、2 番目の hashSet retrieveHS を作成する必要があります。 、正しいパラメーターでプログラムを起動する限り。

その結果を同じ場所で確認したところ、奇妙な動作がありました。3 番目のファイル (電話帳) を読んで、このファイルの行の内容をチェックして、元のファイル、つまり originalHS に存在することがわかっている名前が含まれているかどうかを確認しようとすると、(originalHS.contains(knownName) は true です) 、しかし retrieveHS.contains(knownName) は false ですが、技術的には同じです。

この質問をできるだけ明確にし、コードをできるだけ単純化するためにもう一度試みました。

助けてくれてありがとう


    HashSet<String> originalHS =originalParser(Original.txt)
    //method that parse a voluminous original.txt file (a tsv file) retrieving the first column based upon //other criterias from the other columns.

    System.out.println ("Debug: Display name collection: "+originalHS.toString());
                    //Debug: Display name collection: [Smith, Johnson, Bates]

    String name="Smith";

    if(originalHS.contains(name)){ System.out.print("true")
      else { System.out.print("false");

    //test for presence of name from a third file in this set
    //executes the code as it is true.

    String recorder_txt=//my storage file path
    PrintWriter writer = new PrintWriter(Recorder_txt);
    String recordedNames = originalHS.toString();
    System.out.print("Writing recordedAccessions "+recordedNames);
    //Debug: Display Writing recordedAccessions [Smith, Johnson, Bates]

    writer.println (recordedNames);

    HashSet <String> retrievedHS =new HashSet <String>();

    HashSet <String> returnedHS= retrieve(Recorder_txt)     

//自分のコードの別のクラスで作成。以下のメソッド コードを参照 //元の HS から writer によって Recorder_txt に書き込まれた HashSet を解析するメソッド // ファイルを開き、行 [name1,name2,...] を読み取ります。 [] を抑制し、行を分割し、//HashSet に名前をロードします

        retrievedHS=returnedHS
    //or retrievedHS.addAll(returnedHS) 

    if(retrievedHS.contains(name)){ System.out.print("true");} 
    else { System.out.print("false");} 
    //DOES NOT WORK; it always returns false
4

1 に答える 1

1

コードはまだコンパイルされていないため、理解しにくいです。問題の主な原因として次の 2 つが考えられます。

  1. 最初にテストしoriginalHSていますが、それはファイルに書き込んでいるものではありません。あなたは書いていnameCollectionます。
  2. で分割し","、結果をトリミングしません。したがって、 , を含むセット"Smith""Johnson"として"Bates"書き込まれ、,[Smith, Johnson, Bates]を含むセットとして読み取られます(つまり、最初の名前を除く各名前の前に先行スペースがあります)。"Smith"" Johnson"" Bates"
于 2013-10-26T13:23:48.490 に答える