2016-09-30 66 views
1

在我的程序塊中,我試圖獲取用戶輸入並將它與文件「PriceList3.txt」中的每一行進行比較。對於每一行,我都存儲了一些字符串變量。當其中一行的某些內容與用戶輸入(contains方法)相同時,我使用Pattern和Matcher類來提取某些信息,並將txt文件的一行部分分配給一個變量。在我調用setPrice方法後,我試圖停止閱讀「PriceList3.txt」文件。當if(m.find())中的所有語句都被執行後,您是否知道如何停止讀取文件?我不知道從哪裏開始。停止讀取某一行的文本文件java

感謝您的回覆和幫助。

String regularExpr = "([\\w]+)\\s+([\\w]+)\\s+([\\d.\\d)]+)[\\D]+([\\d.\\d]+)"; 
Pattern pattern = Pattern.compile(regularExpr); 
File inFile = new File("PriceList3.txt"); 
Scanner read = new Scanner(inFile); 
System.out.print("Enter the name and weight of the item: "); 
String item = scan.nextLine(); 
while(read.hasNextLine()) 
{ 
    String each = read.nextLine(); 
    if(each.contains(item)) 
    { 
     Matcher m = pattern.matcher(each); 
     if(m.find()) 
     { 
      String itemName1 = m.group(1).trim()+ " " + m.group(2); 
      itemName.setName(itemName1); 
      String weight = (m.group(3).trim()); 
      double weight1 = Double.parseDouble(weight); 
      itemName.setWeight(weight1); 
      double itemPrice = Double.parseDouble(m.group(4).trim()); 
      itemName.setPrice(itemPrice); 
     } 
     cashier1.addItem(itemName); 
    } 
} 
+0

「break」將停止並退出循環。所以,如果你把它放在你的if語句的末尾,你會突破意志循環並在代碼之後運行代碼。 –

回答

0

你可以使用break語句作爲@Neil寫,或者你可以檢查,而檢查的一些變量:

boolean stop = false; 
while(read.hasNextLine() && !stop) { 
... 
//if you want to stop 
stop = true; 

} 
+0

我真的很感謝你們倆的建議。它對我非常有用,而且我不再有停止掃描器對象來讀取文件的問題。然而,在這個塊中發生了其他奇怪的事情。當我把訂單中的物品(文件頂部的物品放在文件底部的物品)中時,價格加起來。不按順序時,只顯示第一個項目的價格。你有什麼建議嗎? –

1

如果你想停止while循環,最簡單的是將加休息;

String regularExpr = "([\\w]+)\\s+([\\w]+)\\s+([\\d.\\d)]+)[\\D]+([\\d.\\d]+)"; 
Pattern pattern = Pattern.compile(regularExpr); 
File inFile = new File("PriceList3.txt"); 
Scanner read = new Scanner(inFile); 
System.out.print("Enter the name and weight of the item: "); 
String item = scan.nextLine(); 
while(read.hasNextLine()) 
{ 
    String each = read.nextLine(); 
    if(each.contains(item)) 
    { 
     Matcher m = pattern.matcher(each); 
     if(m.find()) 
     { 
      String itemName1 = m.group(1).trim()+ " " + m.group(2); 
      itemName.setName(itemName1); 
      String weight = (m.group(3).trim()); 
      double weight1 = Double.parseDouble(weight); 
      itemName.setWeight(weight1); 
      double itemPrice = Double.parseDouble(m.group(4).trim()); 
      itemName.setPrice(itemPrice); 
      //Jumps out of the innerst loop 
      break; 
     } 
     cashier1.addItem(itemName); 
    } 
} 
//if break is called, the code will continue at this line 

雖然有些人可能會爭辯說破環是不是很好(因爲你在代碼中跳來跳去,它可以成爲大型項目的混亂)。另一種方法是添加布爾值

String regularExpr = "([\\w]+)\\s+([\\w]+)\\s+([\\d.\\d)]+)[\\D]+([\\d.\\d]+)"; 
Pattern pattern = Pattern.compile(regularExpr); 
File inFile = new File("PriceList3.txt"); 
Scanner read = new Scanner(inFile); 
System.out.print("Enter the name and weight of the item: "); 
String item = scan.nextLine(); 
//add the boolean 
boolean complete = false; 
//stops the loop once complete is false 
while(read.hasNextLine() && !complete) 
{ 
    String each = read.nextLine(); 
    if(each.contains(item)) 
    { 
     Matcher m = pattern.matcher(each); 
     if(m.find()) 
     { 
      String itemName1 = m.group(1).trim()+ " " + m.group(2); 
      itemName.setName(itemName1); 
      String weight = (m.group(3).trim()); 
      double weight1 = Double.parseDouble(weight); 
      itemName.setWeight(weight1); 
      double itemPrice = Double.parseDouble(m.group(4).trim()); 
      itemName.setPrice(itemPrice); 
      //Sets the boolean 
      complete = true; 
     } 
     //only adds the item if complete is false 
     if(!complete){ 
      cashier1.addItem(itemName); 
     } 
    } 
}