比较两个集合,比较两个文本文件的添加,删除和修改

我有以下两个夹,其中包含学生证。

id是格式为111-1111的字符串。例如ID 221-2534、215-6365等。

 Collection<String> newKeys = new ArrayList<String>();

Collection<String> oldKeys = new ArrayList<String>();

这些ID与其他数据一起位于固定格式的文件中。也就是说,前8个字符ID,后10个字符名称,后10个字符地址,依此类推。

我将id读入集合,如下所示:

String oldFile = "C:\\oldFile.dat";

String newFile = "C:\\newFile.dat";

BufferedReader in;

String str;

// Read keys from old file

in = new BufferedReader(new FileReader(oldFile));

while ((str = in.readLine()) != null) {

oldKeys.add(str.substring(0, 8).trim());

}

in.close();

// Read keys from new file

in = new BufferedReader(new FileReader(newFile));

while ((str = in.readLine()) != null) {

newKeys.add(str.substring(0, 8).trim());

}

in.close();

此处,文件中的条目按SSN排序。因此,我相信所形成的集合也将得到排序。

现在:

我想通过比较两个集合来了解差异作为结果列表。那就是我需要的列表,其中包含添加的条目,删除的条目和相同的条目。

然后,我将使用具有公共条目的列表从两个文件中读取相应的数据,并将其进行比较以进行任何修改。

那就是我有了共同的清单之后

从列表中获取一个ID。从两个文件中读取该ID的对应数据为String。比较字符串是否有任何差异。如果有所不同,请将newFile字符串移动到fileWithUpdates中。

在没有差异的情况下什么也不做。

这是正确的方法吗?

以及如何比较两个集合以获得结果列表。toBeDeleted,toBeAdded和sameEntries?

如何从键上的文件中读取特定行(在这种情况下为学生ID)?

根据以下答案,添加以下代码:

Iterator<String> iOld = oldKeys.iterator();

Iterator<String> iNew = newKeys.iterator();

Map<String, String> tempMap = new HashMap<String, String>();

while (iOld.hasNext()) {

tempMap.put(iOld.next(), "old");

}

while (iNew.hasNext()) {

String temp = iNew.next();

if (tempMap.containsKey(temp)) {

tempMap.put(temp, "both");

}

else {

System.out.println("here");

tempMap.put(temp, "new");

}

}

所以现在我有一张地图了:

条目 上图中值为“两者”的条目

条目 上图中值为“新”的条目

条目 上图中值为“旧”的条目

所以我的问题归结为:

如何从密钥上的文件中读取特定行,以便我可以比较它们以进行数据修改?

谢谢阅读!

回答:

总体而言,我认为这不是正确的方法。与其将所有信息存储在单个String中,不如创建一个对象,其中包含用于存储您需要存储的各种内容的字段。

public Student {

String id; //or int, or char[8]

String firstName, lastName;

String address;

//and so on

//constructor - Given a line of input from the data file, create a Student object

public Student(String line) {

id = line.substring(0,8);

//and so on

}

至于比较这两个集合,让我们将它们都声明为ArrayLists,然后跟踪它们共同点的索引。

ArrayList<String> newKeys = new ArrayList<>();  //java 7 syntax

ArrayList<String> oldKeys = new ArrayList<>();

//store keys from files.

TreeMap<Integer, Integer> commonKeys = new TreeMap<Integer, Integer>();

//stores the index values from newList as keys that get mapped to the old list index.

ArrayList<Integer> removedKeys =ArrayList<>();

// Store the indices from oldKeys that are not in newKeys.

int newListIndex = 0;

int oldListIndex = 0;

while(newListIndex < newKeys.size() && oldListIndex<oldKeys.size()) {

if(newKeys.get(newListIndex).equals(oldKeys.get(oldListIndex) ) {

commonKeys.put(newListIndex,oldListIndex);

oldListIndex++; newListIndex++

}

else if(newKeys.get(newListIndex).compareTo(oldKeys.get(oldListIndex)>0 ) {

removedKeys.add(oldListIndex);

oldListIndex++

}

else {

//maybe this is a newListIndex that is not in the old list, so it was added.

newListIndex++;

}

}

您将需要稍微调整上面的代码以使其失效保护。另一种方法是使用包含方法,如下所示:

for(int i=0; i<oldKeys.size(); i++) {

String oldKey = oldKeys.get(i);

if(newKeys.contians(oldKey);

commonKeys.put(newKeys.indexOf(oldKey) , i);

else

removedKeys.add(i);

}

以上是 比较两个集合,比较两个文本文件的添加,删除和修改 的全部内容, 来源链接: utcz.com/qa/418779.html

回到顶部