2017-07-27 63 views
1

我有一些任務的問題。我必須找到包含字母「r」的單詞並複製這些單詞。我試圖用for循環做到這一點:Java - 如何在ArrayList中的字符串中找到一個字母的重複字符串

for(int i = 0; i < list.size(); i++){ 
if(list.get(i).contains("r")){ 
      list.add(list.get(i)); 
} 

但它沒有工作。當我添加新的元素數組會使它變大嗎?那麼list.size會改變,並且循環不會管理到數組的最後一個元素?同時被複制的字應該只是原來的一個後,例如輸入:

顯示 RAM 貓

輸出:

顯示 RAM RAM 貓

我真的不知道如何複製它。

這也行不通:

for(int i = 0; i < list.size(); i++){ 
if(list.get(i).contains("r")){ 
      list.add(i+1, list.get(i)); 
} 
+0

你爲什麼不創建一個重複的ArrayList? – Sandeep

+0

嗯,我不知道我可以:D以爲我不得不改變現有的。謝謝。 – YourDoom

回答

5

增加了對元素的重複包含字母r之後,你最終會移動到該副本,並因爲它也包含r您將添加複製它,然後參觀後另一個副本,你會爲它添加另一個副本,等等......無限的,所以你的循環不會結束(直到你將運行內存)。

爲了避免它,在複製元素之後,你需要將跳轉到之後的下一個元素。您可以通過額外增加i

list.add(i+1, list.get(i)); 
i++; 

list.add(++i, list.get(i)); 
+0

Jeez,這很容易:D非常感謝! – YourDoom

1

做到這一點,你可以創建你原來的List的副本元素加入到它。這樣你迭代的列表不會改變大小。

例如:

List<String> list = Arrays.asList("show", "ram", "cat"); 
List<String> result = new ArrayList<>(list); 
list.stream().filter(a -> a.contains("r")).forEach(a -> result.add(a)); 
0

保持簡單,只是用另一種List<String>

public static void main(String[] args) { 
    List<String> input = Arrays.asList("show", "ram", "cat"); 

    List<String> result = new ArrayList<>(); 
    for (String s : input) { 
     if (s != null && s.contains("r")) { 
      result.add(s); 
     } 
     result.add(s); 
    } 

    System.out.println(result); 
} 

將打印您想要的。希望能幫助到你!

1

根據列表類型的不同,這可以通過ListIterator輕鬆實現,該方法有一個add方法,該方法將元素恰好添加到當前元素之後,但不會迭代它。

List<String> list = new ArrayList<>(Arrays.asList("show", "ram", "cat")); 

ListIterator<String> iterator = list.listIterator(); 
while (iterator.hasNext()) { 
    String value = iterator.next(); 
    if (value.contains("r")) { 
     iterator.add(value); 
    } 
} 

System.out.println(list); 

的輸出是這樣的:

[show, ram, ram, cat]

這將ArrayListLinkedList工作,而不是直接從Arrays.asList自帶的特殊List,因爲它是不可修改的。

0

你需要找到單詞包含字母r,之後添加所有找到的詞的列表:

List<String> list = Arrays.asList("black", "red", "blue"); 
    List<String> result = list.stream() 
     .filter(i->i.contains("r")) 
     .collect(Collectors.toList()); 

    list.addAll(result); 
相關問題