import java.io.*;
import java.util.*;
public class GiveMeAName {
public GiveMeAName(String fileA, String fileB) {
A = new File(fileA);
B = new File(fileB);
if (A.isFile() && B.isFile())
createLists();
}
private void createLists() {
listA = hashFile(A);
listB = hashFile(B);
printEqualities();
printSimilarities();
}
private HashMap<String, Integer> hashFile(File file) {
HashMap<String, Integer> list = new HashMap<String, Integer>();
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
while ((line = reader.readLine()) != null) {
String[] parts = line.trim().replaceAll("\"", "").split(";");
/*
* Handelt es sich um File A, so sind an dieser Stelle die ein-
* zelnen Spalten einer Zeile über Indices ansprechbar. Du kannst
* hier also festlegen, welche Spalte analysiert werden soll.
* Weil ich nicht weiß, um welche Spalte es sich handelt, überprüfe
* ich einfach jede Spalte, die nur aus Integern besteht.
*/
for (String col : parts) {
if (col.matches("[0-9]+")) {
if (!list.containsKey(col))
list.put(col, 1);
else
list.put(col, list.get(col) + 1);
}
}
}
reader.close();
}
catch (IOException e) {
e.printStackTrace();
}
return list;
}
/**
* Gibt gleiche Integer aus
*/
private void printEqualities() {
System.out.println("EQUALITIES:");
for (String keyB : listB.keySet())
if (listA.containsKey(keyB))
System.out.printf("%s: %d\t%s\t%s: %d\t%s\n",
"List A", listA.get(keyB), keyB,
"List B", listB.get(keyB), keyB);
}
/**
* Gibt Integer aus, die von vorne in mind. 3 Stellen
* miteinander übereinstimmen
*/
private void printSimilarities() {
System.out.println("\nSIMILARITIES:");
int startCnt = 0;
int similCnt = 3;
for (String intA : listA.keySet()) {
for (String intB : listB.keySet()) {
if (intA.substring(startCnt, similCnt).equals(intB.substring(startCnt, similCnt)))
System.out.println(intA + "\t'" + intA.substring(startCnt, similCnt) + "'");
}
}
}
public static void main(String[] args) {
new GiveMeAName(args[0], args[1]);
}
private File A, B;
private HashMap<String, Integer> listA, listB;
}