【问题标题】:loop over an arraylist of strings遍历字符串的arraylist
【发布时间】:2016-06-01 13:20:46
【问题描述】:

我正在编写 java 代码来循环遍历 ArrayListStrings。如果String 的长度为4,则在其前面添加某个字符。 这是我写的代码。当我明确地做事情时,它可以工作,但是当我编写循环时它不会,而且我找不到我的错误在哪里。

下面是一个例子。我希望输出为 ("hello", "**", "me")

import java.util.ArrayList;
public class Client {
    public static void main(String[] args) {
        ArrayList<String> list= new ArrayList<String>();
        list.add("hello");
        list.add("me");
        //without loop: this gives me correct output
        if(list.get(0).length()==2) list.add(0, "**");
        if(list.get(1).length()==2) list.add(1, "**");
        /* when i loop i get an error,
        for(int i=0; i<list.size()-1; i++) {
            if(list.get(i).length()==2) list.add(i, "**");
        }
        */
        System.out.println(list);
    }
}

【问题讨论】:

    标签: java string loops arraylist


    【解决方案1】:

    您可以使用增强的 for 循环来循环遍历所有字符串并进行直接访问,而不必通过索引来访问它们。

    for (String s : list)
    {
        /* CODE */
    }
    

    您不必使用get 方法来访问字符串及其长度,而只需使用s 变量并使用s.length()

    【讨论】:

    • 这将导致ConcurrentModificationException。 OP 在迭代时正在更改 ArrayList
    【解决方案2】:

    size() - 1错了,添加需要跳过。

    for (int i=0; i < list.size(); i++) {
        if (list.get(i).length() == 2) {
            list.add(i, "**");
            i++; // Do skip the item
        }
    }
    

    顺便说一句:可以写:

        List<String> list = new ArrayList<>();
        Collections.addAll(list, "hello", "me");
    

    【讨论】:

    • 谢谢!我完全忘记了 addAll 方法
    【解决方案3】:

    你应该这样做

    import java.util.ArrayList;
    public class Client {
    public static void main(String[] args) {
                ArrayList<String> list= new ArrayList<String>();
                ArrayList<String> newList= new ArrayList<String>();
                list.add("hello");
                list.add("me");
                for(int i=0; i<list.size(); i++) {
                    if(list.get(i).length()==2)
                        newList.add("**");
                    else
                        newList.add(list.get(i));
                }
                System.out.println(newList);
    }
    

    【讨论】:

    • 不,为什么我需要增加 i ?有新的 ArrayList 只添加值。试试看,你会看到的。谢谢!
    • OP 想要将添加到现有列表中。请演示如何将添加的值添加到现有列表中。
    猜你喜欢
    • 1970-01-01
    • 2018-05-15
    • 2014-12-30
    • 2011-03-04
    • 2011-08-27
    相关资源
    最近更新 更多