Java 无法正确分析true false值

Java 无法正确分析true false值,java,parsing,Java,Parsing,我正在练习解析CSV文件中的数据,但在基于字符串解析真值和假值时发现了一个奇怪的问题 绿色→ 真的 红色→ 假的 我试图在三组数据中使用所有的绿色,但结果是假,假,真。这让我很困惑。非常感谢您的任何帮助、猜测或提示 这是我的解析代码: public void loadCsv() throws IOException { String csvFile = "config.csv"; String line = ""; String csvSplit

我正在练习解析CSV文件中的数据,但在基于字符串解析真值和假值时发现了一个奇怪的问题

  • 绿色
    → 真的
  • 红色
    → 假的
  • 我试图在三组数据中使用所有的
    绿色
    ,但结果是假,假,真。这让我很困惑。非常感谢您的任何帮助、猜测或提示

    这是我的解析代码:

        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);
     }