19
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 += ";";
    }
}

理解不足で申し訳ありませんが、ハッシュマップの使用法を調べようとしています。toArray() が Object[] を返すことを理解しています。しかし、それを String[] に型キャストすることはできませんか? コードでわかるように、後で配列を調べて、分割やその他の文字列操作を行う必要があります。

これを行うと、エラーが発生しました:

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

これにどのように取り組むべきかについてのガイダンスは大歓迎です。ありがとう!

4

3 に答える 3

27

Object[]配列を配列に単純にキャストすることはできませんString[]。代わりに、より適切に機能する汎用バージョンの を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);
于 2013-04-15T18:16:40.730 に答える
2

You could just iterate through the Set, I don't think the toArray step is necessary. Something like this:

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 += ";";
    }
}
于 2013-04-15T18:18:58.200 に答える