Java 无法正确分析true false值
我正在练习解析CSV文件中的数据,但在基于字符串解析真值和假值时发现了一个奇怪的问题Java 无法正确分析true false值,java,parsing,Java,Parsing,我正在练习解析CSV文件中的数据,但在基于字符串解析真值和假值时发现了一个奇怪的问题 绿色→ 真的 红色→ 假的 我试图在三组数据中使用所有的绿色,但结果是假,假,真。这让我很困惑。非常感谢您的任何帮助、猜测或提示 这是我的解析代码: public void loadCsv() throws IOException { String csvFile = "config.csv"; String line = ""; String csvSplit
绿色
→ 真的红色
→ 假的绿色
,但结果是假,假,真。这让我很困惑。非常感谢您的任何帮助、猜测或提示
这是我的解析代码:
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);
}
编辑:
文件如下所示:
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=new Scenario()
导致错误引用,需要更改为Scenario=new Scenario()
以在循环中创建不同的对象,否则,它将指向同一对象
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) {
//create a new object here will lead to wrong referencing
//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++ ;
//correct way to create new object in a loop
scenario = new Scenario();
scenario.setLegalCrossing(true);
}
else if (clazz.equals("scenario:red")){ // could be wrong as well
lineCount++ ;
//correct way to create new object in a loop
scenario = new Scenario();
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);
}
public void loadCsv()引发IOException{
字符串csvFile=“config.csv”;
字符串行=”;
字符串csvSplit=“\\s*,\\s*”;
字符=null;
try(BufferedReader csvReader=newbufferedreader(newfilereader(csvFile));){
字符串headerLine=csvReader.readLine();//去掉标题
//将每行添加到arrayList
而((line=csvReader.readLine())!=null){
csvContents.add(行);
}
对于(字符串csvLine:csvContents){
String[]data=csvLine.split(csvSplit);//按逗号分割并删除冗余空格
字符串clazz=data[0]。toLowerCase();//不能将单词“class”用作变量
//解析数据并检查数据的有效性
试一试{
if(clazz.startsWith(“场景”)&&data.length==1){
//在一组数据之后添加场景
//即第二轮添加第一轮数据
如果(乘客.尺寸()!=0和行人.尺寸()!=0){
//在此处创建新对象将导致错误引用
//场景=新场景();
场景。设置乘客(乘客);
场景。设置行人(行人);
场景。添加(场景);
}
//基于相同的arraylist为创建新的arraylist
//用于不同的引用,否则将始终
//总数据相同
乘客=新阵列列表();
行人=新阵列列表();
如果(clazz.equals(“scenario:green”){//在这里可能是错误的
lineCount++;
//在循环中创建新对象的正确方法
场景=新场景();
场景。setLegalCrossing(真);
}
否则if(clazz.equals(“scenario:red”){//也可能是错误的
lineCount++;
//在循环中创建新对象的正确方法
场景=新场景();
场景。setLegalCrossing(假);
}
继续;
}
如果(data.length==NO_OF_字段){
//添加人和动物
//乘客及行人
...
}否则{
lineCount++;
抛出新的InvalidDataFormatException();
}
}捕获(InvalidDataFormat异常){
System.out.println(“警告:第行的配置文件中的数据格式无效”+lineCount);
}
}
//添加最后一轮数据
场景。设置乘客(乘客);
场景。设置行人(行人);
场景。添加(场景);
场景。设置乘客(乘客);
场景。设置行人(行人);
}
错误地创建实例是一个引用问题。
可以看到实例Scenario=new Scenario()
导致错误引用,需要更改为Scenario=new Scenario()
以在循环中创建不同的对象,否则,它将指向同一对象
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) {
//create a new object here will lead to wrong referencing
//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++ ;
//correct way to create new object in a loop
scenario = new Scenario();
scenario.setLegalCrossing(true);
}
else if (clazz.equals("scenario:red")){ // could be wrong as well
lineCount++ ;
//correct way to create new object in a loop
scenario = new Scenario();
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);
}
public void loadCsv()引发IOException{
字符串csvFile=“config.csv”;
字符串行=”;
字符串csvSplit=“\\s*,\\s*”;
字符=null;
try(BufferedReader csvReader=newbufferedreader(newfilereader(csvFile));){
字符串headerLine=csvReader.readLine();//去掉标题
//将每行添加到arrayList
而((line=csvReader.readLine())!=null){
csvContents.add(行);
}
对于(字符串csvLine:csvContents){
String[]data=csvLine.split(csvSplit);//按逗号分割并删除冗余空格
字符串clazz=data[0]。toLowerCase();//不能将单词“class”用作变量
//解析数据并检查数据的有效性
试一试{
if(clazz.startsWith(“场景”)&&data.length==1){
//在一组数据之后添加场景
//即第二轮添加第一轮数据
如果(乘客.尺寸()!=0和行人.尺寸()!=0){
//在此处创建新对象将导致错误引用
//场景=新场景();
场景。设置乘客(乘客);
场景。设置行人(行人);
场景。添加(场景);
}
//基于相同的arraylist为创建新的arraylist
//用于不同的引用,否则将始终
//总数据相同
乘客=新阵列列表();
行人=新阵列列表();
如果(clazz.equals(“scenario:green”){//在这里可能是错误的
lineCount++;
//创建新ob的正确方法
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) {
//create a new object here will lead to wrong referencing
//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++ ;
//correct way to create new object in a loop
scenario = new Scenario();
scenario.setLegalCrossing(true);
}
else if (clazz.equals("scenario:red")){ // could be wrong as well
lineCount++ ;
//correct way to create new object in a loop
scenario = new Scenario();
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);
}