2015-01-21 74 views
0

我的方法應該打印出我ArrayList中2個字符串之間的所有字符串,不包括開始字符串和結束字符串。從給定範圍內的ArrayList打印字符串java?

public void printRange(String beg, String end) 
{ 
    for(int i = 0; i < list.size(); i++) 
    { 

    } 
} 

字符串beg是起始字符串,字符串結束是最後一個字符串。爲了進一步澄清,如果我有一個包含單詞「狗」「貓」「蘋果」「香蕉」「烏龜」的ArrayList,並且我輸入「貓」和「烏龜」,該方法應該打印出「蘋果」和「香蕉」。

我知道我應該遍歷列表,但我失去了我從那裏去的地方。

編輯:對發佈2個問題抱歉!我會在下次提交它們。

+2

*我有2個問題無關。* - 請發表獨立的問題.. – TheLostMind 2015-01-21 06:06:40

+0

這個問題似乎是題外話,因爲它實際上是兩個獨立的問題是。 – 2015-01-21 06:08:03

+0

@AlexisKing - 我不認爲關閉這個問題,因爲它包含2個不同的問題是正確的。我只是指出,如果他發佈2個單獨的問題,OP將很容易得到答案 – TheLostMind 2015-01-21 06:09:33

回答

0

我會編輯出第二個問題。你不會在SO上發佈兩個關於一個主題的問題。

關於你的第一個問題,你想獲得第一個字符串和最後一個字符串的索引。像這樣的:

public void printRange(String beg, String end) 
{ 
    int begIdx, endIdx; 
    for(int i = 0; i < list.size(); i++) 
    { 
     if (list[i].equals(beg)) { 
      begIdx = i; 
     } 
     if (list[i].equals(end)) { 
      endIdx = i; 
     } 
    } 

    for(int i = begIdx; i < endIdx; i++) 
     // Print range... 
} 

這是一個快速和骯髒的實現。你可以在列表中遍歷一遍。

0

我會使用一個小國機 -

  • 狀態0 =期初未發現
  • 狀態1 =發現之初,沒有找到結束
  • 狀態2 =最終發現(或者可以回去爲0,如果你想尋找再次開始)

您需要相關檢查,以改變國家與只需要打印的東西了,當你狀態是1

這樣,你只需要經歷一次列表,而不是通過它(部分)來查找開始和結束,然後再次通過(部分)再次輸出所需的字段。

2

嘗試使用標誌來避免多一次N次迭代。

public void printRange(String beg, String end) 
    { 
     boolean startPrinting = false; 
     for (int i = 0; i < list.size(); i++) 
     { 
      if (startPrinting) { 
       System.out.println(list.get(i)); 
      } 
      if (list.get(i).equals(beg)) { 
       startPrinting = true; 
      } else if (list.get(i).equals(end)) { 
       break; 
      } 

     } 
    } 
+1

Upvoted,但乞討應該被排除在外。所以你可能想要向上移動印版。 – 2015-01-21 06:34:46

+0

修好了,謝謝! – Keshava 2015-01-21 07:07:37

0

您還可以使用indexOf()方法。我不確定你在做什麼,但要記住一個List可以包含重複的鍵。考慮使用Set來代替。

package com.company;

import java.util.ArrayList; import java.util.List;

公共類主要{

private List<String> list = new ArrayList<String>(); 

{ 
    list.add("dog"); 
    list.add("cat"); 
    list.add("apple"); 
    list.add("banana"); 
    list.add("turtle"); 
} 

public void printRange(String beg, String end) 
{ 
    int start = list.indexOf(beg) + 1; 
    int finish = list.indexOf(end); 

    if (start <= 0 || start >= finish) return; 

    for(int i = start; i < finish; i++) 
    { 
     System.out.println(list.get(i)); 
    } 
} 

public static void main(String[] args) { 
    new Main().printRange("cat", "turtle"); 
} 

}