2013-04-15 70 views
14
Set<String> keys = mappings.keySet(); 
String[] keyArray = (String[]) keys.toArray(); 

String hashmapDetails = ""; 
for(int p=0; p < keyArray.length; p++){ 
    String[] details = keyArray[p].split("/"); 
    hashmapDetails += details[1]; 
    hashmapDetails += mappings.get(keyArray[p]); 
    if (p != keyArray.length -1){ 
     hashmapDetails += ";"; 
    } 
} 

原諒我的不理解,但我想探索包含HashMap的使用。我明白toArray()返回一個Object []。但是,是不是可以將它轉換爲String []?正如你可以在代碼中看到的,稍後,我需要通過一個數組並進行一些拆分和其他字符串操作。將Object []從hashmap鍵集轉換爲String []?

通過這樣做,我得到了一個錯誤:

java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[] 

,我應該如何解決這個任何指導,是極大的讚賞。謝謝!

回答

21

你不能簡單地投了Object[]陣列到陣列String[]。您應該改用the generic version of toArray,應該更好地工作:

String[] keyArray = keys.toArray(new String[keys.size()]); 

另外請注意,你可以簡單地在entrySet(將保存所有的get呼叫)和使用StringBuilder更好的字符串連接效率迭代:

StringBuilder hashmapDetails = new StringBuilder(); 
for(Map.Entry<String, String> e : mappings.entrySet()) { 
    String[] details = e.getKey().split("/"); 
    hashmapDetails += details[1]; 
    hashmapDetails += e.getValue(); 
    hashmapDetails += ";"; 
} 

String result = hashmapDetails.substring(0, hashmapDetails.length() - 1); 
+0

感謝您的幫助!帶有toArray通用版本的第一個解決方案對我來說已經足夠了,謝謝! =) – lyk

+1

'toArray(new String [0])'版本肯定是要走的路。它很簡潔,並且表達了你正在做的事情。 – NRitH

+0

@NRitH可能但它創建一個不必要的對象,所以我更喜歡「大小」的版本。 – assylias

2

你可以通過Set只是想迭代,我不認爲toArray步驟是必要的。類似這樣的:

Set<String> keys = mappings.keySet(); 

String hashmapDetails = ""; 
for(String key : keys){ 
    String[] details = key.split("/"); 
    hashmapDetails += details[1]; 
    hashmapDetails += mappings.get(key); 
    if (p != keys.size() -1){ 
     hashmapDetails += ";"; 
    } 
} 
6

可以將鍵集轉換爲String []。試試這個:

String[] keys = map.keySet().toArray(new String[0]); 
相關問題