繁体   English   中英

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

[英]How do I read multiple file lines and store them into different Objects Using Scanner

我有一个文件,我试图从中读取多行。 但是根据是房地产经纪人行还是物业行,它将某些东西存储到行值数组中。 我找不到正确的循环来正确读取行这是我的代码以读取行

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

但是当我运行时,我得到了:

fsdfsdfsdfdsfdsfsdfsdfds房地产经纪人日志中添加了许可证编号为MN4564567的房地产经纪人对象:

物业日志:物业{mlsNumber = 4455667,licenseNumber = MN4564567,streetAdress = 4455这个圈子,城市=丹佛,州= CO,邮政编码= 80333,卧室= 1,浴室= 1.0,出售= false,询问价格= 344555.0}所有属性均为正确的BUILD SUCCESSFUL(总时间:0秒)

这是我要读取的文件:

REALTOR,ADD,MN4564567,Carla,Combs,444-555-6666,0.014属性,ADD,4455667,MN4564567,4455这个圈子,丹佛,CO,80333,1,1,N,344555 REALTOR,ADD,RR6655443,Jerry, Smith,555-444-3333,0.013 PROPERTY,ADD,23456789,RR6655443,888 Terry Lane,Longmont,CO,80503,3,2,N,222222 REALTOR,ADD,AB1234567,Matthew,Munez,123-456-7890, 0.012属性,ADD,1234567,AB1234567,1234哪条路,某处,CO,82222,3,3,Y,222222属性,ADD,2234567,AB1234567,345 Main St,柯林斯堡,CO,81333,4,3.5,N ,222333 REALTOR,DEL,MN4564567 REALTOR,ADD,XY98765432,Alex,Yung,999-888-7777,0.013 PROPERTY,ADD,9998888,XY98765432,111 Main St,Cheyenne,WY,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语句,那应该可以修复您的错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM