Java - 如何在ArrayList中的字符串中查找重复字符串的字母

时间:2017-07-27 10:15:38

标签: java string arraylist duplicates

我遇到了一些问题。我必须找到包含字母" r"并复制这些单词。我试着用for循环来做这个:

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

但它根本不起作用。当我向数组中添加新元素时会让它更大吗?然后list.size会改变,循环不会设法到达数组的最后一个元素?重复单词也应该在原始单词之后,例如输入:

显示 内存 猫

输出:

显示 内存 内存 猫

我真的不知道如何复制它。

这也不起作用:

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

5 个答案:

答案 0 :(得分:5)

为包含字母r的元素添加副本后,您最终会移动到该副本,因为它还包含r,您将为其添加副本,然后在访问另一个副本后,您将为它添加另一个副本,依此类推......所以你的循环不会结束(直到你将运行内存)。

为避免这种情况,在复制元素后,您需要跳转到复制后的下一个元素。您可以在

之后通过额外递增i来完成此操作
list.add(i+1, list.get(i));
i++;

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

答案 1 :(得分: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));

答案 2 :(得分: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 ); 方法,该方法在当前元素之后添加元素,但不迭代它。 / p>

ArrayList

这个输出是:

[show, ram, ram, cat]

这适用于LinkedListList,但不适用于直接来自Arrays.asList的特定this.route.params.subscribe(newValue => ...) ,因为它是不可修改的。

答案 3 :(得分: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);
}

将打印您想要的。希望它有所帮助!

答案 4 :(得分: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);