2011-05-20 83 views
3

我有一组我想遍历,并改变所有那些谁等于什么的字符串,以平等的东西还有:如何在foreach迭代过程中更改Set <String>中的字符串?

// Set<String> strings = new HashSet() 
for (String str : strings) { 
    if (str.equals("foo")) { 
    // how do I change str to equal "bar"? 
    } 
} 

我试图取代(),它没有工作。我也尝试删除“str”并添加所需的字符串,从而导致错误。我会如何去做这件事?

回答

6

两点:

  1. 字符串是不可变的;你不能“改变”一个字符串。您可以从Set中删除一个,并将其替换为另一个,但这一切都在改变。
  2. 一组意味着“每个只有一个副本”。什么是“全部改变”的东西?为什么你必须迭代Set?为什么不这样做呢?

    strings.remove(“foo”);
    strings.add(“bar”);

2

由于Set不能有重复,所以你想要做的有点奇怪。为什么迭代?

if (strings.contains("foo")) { 
    strings.remove("foo"); 
    strings.add("bar"); 
} 

如果在线程之间共享strings集合,请确保整个块已正确同步。

0

如果在迭代过程中更改了HashSet,则会得到ConcurrentModificationException。这意味着,您必须首先删除“foo”,然后在迭代器外部添加“bar” -

0

set是不包含重复对象的集合。因此,如果您希望用其他内容替换集合中的某个对象,则可以先将其删除,然后添加您希望用其替换的字符串。

0
// Set<String> s = new HashSet(); 

    for (String str : s) { 
       if (str.equals("foo")) { 
        s.remove(str); 
        s.add("bar"); 
       } 
      } 
+0

's.add( “B”); s.add(“s”); s.add(“x”); s.add(“d”); System.out.println(s); (String str:s){ System.out.println(str);如果(str.equals(“x”)){s1remove(str); s.add(“asdf”); } } System.out.println(s); '我已经试过了,没有得到例外 – 2011-05-20 10:19:29

1

您不应该在迭代过程中更改该集合。

更好试试这个:

Set<String> strings = new HashSet(); 
strings.add("foo"); 
strings.add("baz"); 

Set<String> stringsNew = new HashSet(); 

for (String str : strings) { 
    if (str.equals("foo")) { 
    stringsNew.add("bar"); 
    } else { 
    stringsNew.add(str); 
    } 
} 

System.out.println(stringsNew);