2011-05-20 20 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);