Java 如何使用扫描仪读取多个文件行并将其存储到不同的对象中

Java 如何使用扫描仪读取多个文件行并将其存储到不同的对象中,java,loops,csv,linked-list,java.util.scanner,Java,Loops,Csv,Linked List,Java.util.scanner,我有一个文件,我正试图读取多行。但取决于它是房地产经纪人行还是建筑红线,它会将某些内容存储到line values数组中。我想不出正确的循环来正确地读这些行,这是我读这些行的代码 while (fileScanner.hasNextLine()) { String oneLine; String[] lineValues = null; oneLine = fileScanner.nextLine(); lineValue

我有一个文件,我正试图读取多行。但取决于它是房地产经纪人行还是建筑红线,它会将某些内容存储到line values数组中。我想不出正确的循环来正确地读这些行,这是我读这些行的代码

    while (fileScanner.hasNextLine()) {
        String oneLine;
        String[] lineValues = null;
        oneLine = fileScanner.nextLine();

        lineValues = oneLine.split(",");

        if (lineValues[0].contains("REALTOR")) {
            if (lineValues[1].contains("ADD")) {                    
                processRealtorAddition(lineValues);                    
            } else if (lineValues[1].contains("DEL")) {
                realtorDeletion(lineValues);
            }
            else
                break;

        }  if (lineValues[0].contains("PROPERTY")) {
            System.out.println("fsdfsdfsdfdsfdsfsdfsdfds");                
            if (lineValues[1].contains("ADD")) {                    
                processPropertyAddition(lineValues);
                break;
            } else if (lineValues[1].contains("DEL")) {
                propertyDeletion(lineValues);
            }
        }             
    }
}
但当我跑的时候,我得到了这个:


已添加许可证号为MN4564567的Realtor对象 FSDFDSFDSFSDFSDFDS房地产经纪人日志:

属性日志:属性{mlsNumber=445567,licenseNumber=MN4564567, 街道地址=4459这个圆圈,城市=Denver,州=CO,zipCode=80333, 卧室=1间,浴室=1.0间,售出=false,askingPrice=344555.0}全部 属性正确生成成功(总时间:0秒)

这是我试图读取的文件:

房地产经纪人,地址:MN4564567,卡拉,库姆斯,444-555-6666,0.014 属性,ADD,4455667,MN4565674455此 科罗拉多州丹佛Circle,邮编:80333,1,1,北纬344555 房地产经纪人,地址:RR6655443,杰里,史密斯,555-444-3333,0.013 物业,地址:23456789,RR6655443888 美国科罗拉多州朗蒙特州莱恩,北区80503,3,2,22222 房地产经纪人,地址:AB1234567,马修,穆内斯,123-456-7890,0.012 属性,添加,1234567,AB12345671234 路,某处,CO,82222,3,3,Y,2222222财产,地址:2234567,AB1234567345 科罗拉多州科林斯堡主街,北81333,4,3.5,邮编222333,明尼苏达州德尔市房地产经纪人,邮编4564567 房地产经纪人,地址:Yung Alex XY98765432,999-888-7777,0.013 物业,地址:怀俄明州夏延市XY98765432111大街999888号,邮编:82222,1,1

,N,199888

我只需要它来阅读第一行获得所有正确的信息,然后重新开始while循环,然后阅读第二行。谢谢

这是处理加法的静态方法

static void processPropertyAddition(String lineValues[]) {
    Property property = new Property(lineValues);

    boolean value1 = property.verifyMlsNumber();
    boolean value2 = property.verifyState();
    boolean value3 = property.verifyZipCode();

    if (value1 == false) {
        System.out.println("ERROR: invalid MLS number: "
                + property.mlsNumber + "\n");
    } else if (value2 == false) {
        System.out.println("ERROR: Invalid State: "
                + property.state + "\n");
    } else if (value3 == false) {
        System.out.println("ERROR: Invalid zip code: "
                + property.zipCode + "\n");
    }

    boolean value4 = realtorLogImpl.isLicenseUnique(property.getLicenseNumber());

    boolean value5 = propertyLogImpl.isMlsUnique(property.getMlsNumber());
    if (value4 == false && value5 == false) {
        propertyList.add(property);
    } else if (value5 == true && value4 == true) {
        propertyList.add(property);
    } else if (value4 == false && value5 == true) {
        propertyList.add(property);

        System.out.println("The Property with Realtor license number "
                + property.getLicenseNumber() + " and with MLS number"
                + property.getMlsNumber() + " has been added");
    } else if (value4 == true && value5 == false) {
        System.err.println(" Property will not be added due to "
                + "a Realtor license or a MLS number that is not "
                + "unique");
    }
}
这是
PropertyLogImpl
向属性链接列表添加属性的方法

  public boolean add(Property property) {
    return propertyList.add(property);
}
我必须有一个方法来添加属性,我觉得这个方法可能不正确,可能是它的原因,而不是这个

 }  if (lineValues[0].contains("PROPERTY")) {
你可能想写

 } else if (lineValues[0].contains("PROPERTY")) {
此外,无论何时使用
contains
,您都可能希望使用
equals

正如在评论中已经提到的,您对
break
语句的使用是可疑的

如果您运行到无限循环中,那么目前为止显示的代码中没有任何内容会导致这种情况。无限循环可能来自这里:

realtorLogImpl.isLicenseUnique(property.getLicenseNumber());

使用调试器(提示,提示,…)应该很容易找到原因。

break
语句从
for/while
循环中中断


如果在
processPropertyAddition
方法调用之后删除break语句,应该可以修复您的错误。

您知道
break
语句的作用吗?我忘记删除sysout fsdfdsfsdfdsfdsfsdfsd了,如果我去掉break语句,就会发生这种情况许可证号为MN45647的Realtor对象已添加fsdfsdfsdfdsfdsfsdfsdfds许可证号为RR6655443的Realtor对象已添加fsdfsdfsdfds错误:无效的MLS号:23456789它仅显示此信息,然后它将保留在无限环井中,我们看不到显示“无效MLS编号”的代码。保持在无限循环中的代码可能也是您没有向我们展示的代码。我们没有足够的信息来帮助你。好的,我会编辑它,然后告诉你之后会发生什么