2017-07-27 108 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); 
相关问题