[英]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.