如何将hashmap值转换为单个字符串

时间:2016-02-15 01:52:30

标签: java

我目前在从哈希映射中的值中提取单个字符串时遇到一些麻烦。

目前,我的哈希映射设置如下:

Map<Character, Character> keyMapping = new HashMap<Character, Character>();
       for(int i = 0; i < rotor1.length(); i++) {
           keyMapping.put(thirdKeyMapping.get(rotor1.charAt(i)), rotor2.charAt(i));
       }

当你打印keyMapping时,它会渲染一个数组,如下所示:

println(keyMapping.values().toString());
//[F, S, Y, Q, N, I, D, X, B, E, H, Z, C, T, J, O, W, M, V, A, L, K, U, P, R, G]

如何更改此打印行以使该值为仅包含字母的单个字符串?例如:

//FSYQNIDXBEHZCTJOWMVALKUPRG

希望这很清楚,但如果有任何其他信息可以帮助我回答这个问题,请告诉我。

6 个答案:

答案 0 :(得分:2)

如果您正在使用Java 8,那么您可以使用reduction来完成您之后的操作,String标识为空字符串""

请注意,由于您拥有Character的集合,因此您必须先执行一个中间步骤,将它们首先转换为String

String reduced = keyMapping.values()
                           .stream()
                           .map(Object::toString)
                           .reduce("", String::concat);

然后您可以打印reduced,它将是您期望的字符串。

答案 1 :(得分:1)

你只需先获取值的字符串然后将所有非字母替换为“”即可。

Map<Character, Character> keyMapping = new HashMap<Character, Character>();
keyMapping.put('a', 'c');
keyMapping.put('b', 'c');
keyMapping.put('c', 'c');
keyMapping.put('d', 'c');
keyMapping.put('e', 'c');

String result = keyMapping.values().toString().replaceAll("[^\p{Alpha}]", "");

结果:

result = ccccc

答案 2 :(得分:1)

我使用map entrySet

public class MapToString {
     public static String valueToString(Map<Character,Character> map) {
           StringBuilder stringBuilder = new StringBuilder();
           for (Map.Entry<Character,Character> entry:map.entrySet()) {
               stringBuilder.append(entry.getValue());
           }
           return stringBuilder.toString();
     }
     public static void main(String[] args) {
           Map<Character,Character> res = new HashMap<>();
           res.put('A','A');
           res.put('B','B');
           System.out.println(valueToString(res));
     }
}

答案 3 :(得分:0)

以下是我使用keyMapping.values()返回的实际集合的方法。

Map<Character, Character> keyMapping = new HashMap<Character, Character>();
       for(int i = 0; i < rotor1.length(); i++) {
           keyMapping.put(thirdKeyMapping.get(rotor1.charAt(i)), rotor2.charAt(i));
       }
// ^^Your code^^

Iterator<Character> iter = keyMapping.values().iterator();
StringBuilder sb = new StringBuilder();
if (iter.hasNext()) {
    sb.append(iter.next());
    while (iter.hasNext()) {
        sb.append(iter.next());
    }
}

详细了解此方法here

答案 4 :(得分:0)

我个人更喜欢使用打字系统。所以对于复杂的 json 对象,例如:

{"result": "some_data", "extras": [{"key": "value"}]}

我通常会这样做:

class Result implements Serializable {

private String result;
private List<Extras> extras;
// others
}

class Extras implements Serializable {
private String key;
// other fields and logic

}

那样我就可以做诸如 Result.extras.get(1).getKey() 之类的事情。

答案 5 :(得分:-3)

使用字符串方法 -​​ 替换&#34;,&#34;到&#34;&#34;