У меня есть файл буквенно-цифровых номеров VIN от транспортных средств (сохраняются в виде строк). Мне нужно разобрать этот файл и определить
1) Дублирован ли VIN? Если так, сколько раз
2) Запишите дублированный VIN и общее количество дубликатов в текстовый файл
Я заставил его работать, используя метод грубой силы с двойными вложенными циклами For. Ищу более элегантный способ разбора строк. Я использую Java 7 в NetBeans 8.2, и мне не нравится использование .set или hashmap.
Ограничения
1) VIN могут быть в любом порядке
2) Дубликаты могут быть случайно разбросаны по файлу
/ * a) Открыть входные и выходные файлы
* /
try {
inputStream = new BufferedReader(new FileReader(fileName));//csv file
outputStream = new PrintWriter(new FileWriter("DuplicateVINs.txt"));
/ * б) Читать в файл построчно
затем вырежьте 17-значный VIN из дополнительных данных, которые мне не нужны
* /
while ((thisLine = inputStream.readLine()) != null) {
l = thisLine.substring(1, 18);
linesVIN.add(l.split(","));//why does this split have to be here?
}
/ * c) Теперь, когда список заполнен, вычислите его размер и затем запишите в массив строк
* /
String[][] inputArray = new String[linesVIN.size()][];
i=linesVIN.size();
System.out.println(i);
linesVIN.toArray(inputArray);
/ * d) будет использовать два вложенных поля для поиска дубликатов
* /
countj=0;
countk=0;
for (int j = 1;j<=i-1; j++){ //j loop
duplicateVIN=Arrays.toString(inputArray[j]);
for(int k=1;k<=i-1;k++){
if(duplicateVIN.equals(Arrays.toString(inputArray[k]))){
countk=countk+1;
foundFlag=true;
} else{
//
if(countk>=2){
//if(j!=k){
System.out.println(duplicateVIN + countk);
//} // see if removes the first duplicate
}
foundFlag=false;
countk=0;
}
} //ends k loop
countj=j;
} //ends j loop
} //Completes the try
[2q3CDZC90JH1qqqqq], 3
[2q4RC1NG1JR1qqqqq], 4
[2q3CDZC96KH1qqqqq], 2
[1q4PJMDN8KD1qqqqq], 7