使用修改String </string>迭代List <string>

时间:2011-01-31 13:56:37

标签: java string collections

我不能这样修改List的元素:

for (String s : list)
{
   s = "x" + s;
}

执行后,此列表的此代码元素保持不变 如何通过最简单的方式修改List来实现迭代。

7 个答案:

答案 0 :(得分:13)

由于String对象是不可变的,因此您无法更改迭代的值。此外,您无法修改在此循环中迭代的列表。执行此操作的唯一方法是使用标准循环迭代列表索引或使用ListIterator接口:

for (int i = 0; i < list.size(); i++)
{
    list.set(i, "x" + list.get(i));
}

for (ListIterator i = list.listIterator(); i.hasNext(); )
{
    i.set("x" + i.next());
}

答案 1 :(得分:3)

字符串是不可变的野兽,因此我可以建议遵循这一理念并创建新列表而不是修改一个:

List<String> mappedList = new ArrayList<String>();

for (String s : list) {
    mappedList.add("x" + s);
}

我相信,这将使您的代码更易于理解和维护。

答案 2 :(得分:3)

这样的事情应该可以胜任:

public static void main(String[] args) throws Exception {
    final List<String> lst = Arrays.asList("a", "b", "c");
    for(final ListIterator<String> iter = lst.listIterator(); iter.hasNext(); ) {
        final String s = iter.next();
        iter.set(s + "x");
    }
    System.out.println(lst);
}

答案 3 :(得分:2)

Java字符串是不可变的,因此无法修改它们。此外,如果要修改列表,请使用迭代器接口。

答案 4 :(得分:2)

正如其他人所指出的那样:

  • 您无法修改Java中的字符串,因此s = "x" + s将创建一个新字符串(不会包含在列表中)
  • 即使可以,变量s也是局部变量,当分配给它时,不会影响列表中包含的值。

在这种情况下,解决方案是使用StringBuilder表示您可以实际修改的字符串,或使用ListIterator作为@Michael Borgwardt和@jarnbjo指出。


使用StringBuilder

List<StringBuilder> someStrings = new LinkedList<StringBuilder>();
someStrings.add(new StringBuilder("hello"));
someStrings.add(new StringBuilder("world"));

for (StringBuilder s : someStrings)
    s.insert(0, "x");

使用ListIterator

List<String> someStrings = new LinkedList<String>();
someStrings.add("hello");
someStrings.add("world");

for (ListIterator<String> iter = someStrings.listIterator(); iter.hasNext();)
    iter.set("x" + iter.next());

ideone.com demo

答案 5 :(得分:1)

在循环中,您只需修改String的本地副本。更好的选择是使用列表的迭代器,并替换列表的当前位置。

编辑,糟糕,慢慢来。

答案 6 :(得分:1)

您无法以这种方式修改String的{​​{1}}元素,但List可以正常使用:

StringBuilder

其他原始vs参考情况和for-each循环也是如此。在循环中,for (StringBuilder sb : list) sb.append("x"); 是不可变的,但其中的项的状态不是 - 基元(如Iterable)没有状态,因此您只修改本地副本,但引用可以有状态,因此你可以通过他们可能拥有的任何mutator方法改变它们(例如,String)。