2013-04-02 59 views
0

在我的程序的一部分中,我正在讀取包含"ua, "的行,並將它們設置爲等於我想要處理的行數。我想用數組來使這種靈活性適合我想要的許多行。使用數組允許靈活性

這是它如何與4線

,而不是有多個else if語句的作品,我想簡化,這樣我可以定義多個行我要處理,而不必編輯此部分

try (BufferedReader br = new BufferedReader(new FileReader(f.getAbsolutePath()))) { 

    String line1 = null, line2 = null, line3 = null, line4 = null, line = null; 
    boolean firstLineMet = false; 
    boolean secondLineMet = false; 
    boolean thirdLineMet = false; 

    while ((line = br.readLine()) != null) { 
     if (line.contains("ua, ")) { 

      if (!firstLineMet) { 
       line1 = line; 
       firstLineMet = true; 
      } else if (!secondLineMet) { 
       line2 = line; 
       secondLineMet = true; 
      } else if (!thirdLineMet) { 
       line3 = line; 
       thirdLineMet = true; 
      } else { 
       line4 = line; 
       ProcessLines(uaCount, line1, line2, line3, line4); 
       line1 = line2; 
       line2 = line3; 
       line3 = line4; 
      } 
     } 
    } 
} 
+0

您是否嘗試過解決方案? –

+0

爲我們說清楚。你的問題是什麼? – apast

+0

而不是有多個其他if語句,我想簡化這個,以便我可以定義一些我想要處理的行,而不必編輯這部分 – user2007843

回答

0

假設讀取內存中的整個文件是好的,你可以使用由Files提供的方便的方法:

List<String> lines = Files.readAllLines(yourFile, charset); 
ProcessLines(uaCount, lines.get(0), lines.get(1), ...); 

或者如果y ou想要按順序處理線路,但只能達到一定的限制:

for (int i = 0; i < limit && i < lines.length(); i++) { 
    processLine(lines.get(i)); 
} 
1

替代方案您可以採取以下措施來實現您的目標。

int counter = 0; 
int limit = 3; // set your limit 
String[] lines = new String[limit]; 
boolean[] lineMet = new boolean[limit]; 

while ((line = br.readLine()) != null) { 
    if (line.contains("ua, ")) { 
     lines[counter] = line; 
     lineMet[counter] = true; // doesn't make any sense, however 
     counter++; 
    } 
    if (counter == limit){ 
    // tweak counter otherwise previous if will replace those lines with new ones 
     counter = 0; 
     ProcessLines(uaCount, lines); // send whole array 
     lines[0] = lines[1]; // replace first line with second line 
     lines[1] = lines[2]; // replace second line with third line 
     lines[2] = lines[3]; // replace third line with fourth line 

     // ProcessLines(uaCount, lines[0], lines[1], lines[2], lines[3]); 
     // Do Something 
    } 
} 

我希望這會對你有幫助。

+0

這是我正在嘗試做的。我的目標是能夠改變一個變量,讓我們稱之爲'lineNumber'這將得到我所需要的 – user2007843

+0

我認爲這就是我的答案。這裏我使用'limit'變量併發送整個數組,以便不必依賴於多少行。 – Smit

+0

沒關係,但在處理完這些行之後,我會如何將它們設置爲與下一個相等? – user2007843