我有以下问题:
我正在根据各种参数从hashSet中的大量制表符分隔值文件(“原始文件”)中解析列。 我想解析一次,并将其写为简化文件(“解析结果”),我不需要每次都重新拆分/过滤所有内容,但只需要读取“解析结果”文件然后构建第二个hashSet retrieveHS ,只要我使用正确的参数启动程序。
当我检查那个结果的地方一样的时候,我有一个奇怪的行为。 当我在第三个文件(电话簿)中读取内容并尝试检查此文件行的内容以包含我知道存在于原始文件中的名称,因此在originalHS中,(originalHS.contains(knownName)为true ,但检索到的HS.contains(knownName)是假的,而它在技术上是相同的。
我再次尝试使这个问题变得清晰,代码尽可能地简化,
感谢您的帮助
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)
//在我自己的代码中的另一个类中创建,请参阅下面的方法代码 //解析Recorder_txt中writer的原始HS编写的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
答案 0 :(得分:1)
代码仍然没有编译,因此很难理解。我看到了你的问题的两个主要潜在原因:
originalHS
进行测试,但这不是您要写入文件的内容。你正在写nameCollection
。","
上拆分,并且不会修剪结果。因此,包含"Smith"
,"Johnson"
,"Bates"
的集合将被写为[Smith, Johnson, Bates]
,并被视为包含"Smith"
," Johnson"
的集合, " Bates"
(即除了第一个名称之外,每个名称前面都有一个前导空格。)