Я практикую парсинг данных из CSV-файла, но обнаружил странность, когда проанализировал истинное и ложное значение на основе строки.
green
→ true red
→ false
Я пробовал использовать все green
в трех наборах данных, но оказалось false, false, true. Меня это сбивает с толку. Любая помощь, предположение или подсказка приветствуются.
Вот мой код синтаксического анализа:
public void loadCsv() throws IOException {
String csvFile = "config.csv";
String line = "";
String csvSplit = "\\s*,\\s*";
Character character = null;
try (BufferedReader csvReader = new BufferedReader(new FileReader(csvFile));) {
String headerLine = csvReader.readLine(); //get rid of the header
//add each line to the arrayList
while ((line = csvReader.readLine()) != null) {
csvContents.add(line);
}
for(String csvLine : csvContents) {
String[] data = csvLine.split(csvSplit); // split by comma and remove redundant spaces
String clazz = data[0].toLowerCase();// cannot use word "class" as a variable
// parsing the data and check validness of data
try {
if (clazz.startsWith("scenario") && data.length == 1) {
// adding scenario after one set of data
// i.e second round adding the first round data
if (passengers.size() != 0 && pedestrians.size() != 0) {
Scenario scenario = new Scenario();
scenario.setPassengers(passengers);
scenario.setPedestrians(pedestrians);
scenarios.add(scenario);
}
// create new arraylist for based on the same arrayList
// for different referencing, or it will be always
// the same data in total
passengers = new ArrayList<Character>();
pedestrians = new ArrayList<Character>();
if (clazz.equals("scenario:green")) { // could be wrong here
lineCount++ ;
scenario.setLegalCrossing(true);
}
else if (clazz.equals("scenario:red")){ // could be wrong as well
lineCount++ ;
scenario.setLegalCrossing(false);
}
continue;
}
if (data.length == NO_OF_FIELDS) {
// adding person and animal
// to passengers and pedestrians
...
} else {
lineCount++;
throw new InvalidDataFormatException();
}
} catch (InvalidDataFormatException e) {
System.out.println("WARNING: invalid data format in config file in line " + lineCount);
}
}
//add the last round data
scenario.setPassengers(passengers);
scenario.setPedestrians(pedestrians);
scenarios.add(scenario);
scenario.setPassengers(passengers);
scenario.setPedestrians(pedestrians);
}
Вот часть моего Scenario
класса:
public class Scenario {
private Random random;
private ArrayList<Character> passenagers = new ArrayList<Character>();
private ArrayList<Character> pedestrians = new ArrayList<Character>();
private boolean legalCrossing;
private boolean hasYouInCar;
private boolean hasYouInLane;
public Scenario() {
}
public Scenario(ArrayList<Character> passengers, ArrayList<Character> pedestrians, boolean legalCrossing) {
this.passenagers = passengers;
this.pedestrians = pedestrians;
this.legalCrossing = legalCrossing;
}
public void setLegalCrossing(boolean legalCrossing) {
this.legalCrossing = legalCrossing;
}
public boolean getLegalCrossing () {
return legalCrossing;
}
РЕДАКТИРОВАТЬ: Файл выглядит следующим образом:
The file looks like this:
[0], [1], [2], [3] , [4] , [5] , [6] , [7] , [8] , [9]
class, gender, age, bodyType, profession, pregnant, isYou ,species, isPet, role
scenario:green, , , , , , , ,
person, female, 24, average , , FALSE , , , , passenger
animal, male , 4, , , FALSE , , dog , TRUE , pedestrian
scenario:red
person, male , 16, athletic, boxer , FALSE , TRUE , , , passenger
person, female, 25, athletic, doctor , TRUE , FALSE , , , pedestrian
Тест с использованием System.out.println ("@@" + clazz + "@@");
@@scenario:green@@
@@person@@
@@person@@
@@person@@
@@person@@
@@person@@
@@person@@
@@animal@@
@@scenario:green@@
@@animal@@
@@animal@@
@@person@@
@@person@@
@@person@@
@@person@@
@@scenario:green@@
@@person@@
@@person@@
@@person@@
@@person@@
@@person@@
@@person@@