如何在没有[...]和分隔符的情况下在Map中打印出值(字符串)?

时间:2013-03-23 21:05:04

标签: java map

我打印出存储在地图中的字符串值,但我不希望它打印[]或分隔符。如何仅打印值?

Iterator<String> iterator = styles.keySet().iterator();
while (iterator.hasNext()) {
    String key = iterator.next().toString();
    String value = styles.get(key).toString();
    stylePlaceHolder = value + "\n";
}
siteElements.add(stylePlaceHolder);

Iterator<String> iterator2 = libraries.keySet().iterator();
while (iterator2.hasNext()) {
    String key = iterator2.next().toString();
    String value = libraries.get(key).toString();
    libPlaceHolder = value + "\n";
    System.out.println(libraries.values().toString());
}

产生

03-23 17:56:56.350: I/System.out(9642143): [<script src="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.min.js"></script>
03-23 17:56:56.350: I/System.out(9642143): 
, <link rel="stylesheet" href="http://code.jquery.com/mobile/1.3.0/jquery.mobile-1.3.0.
min.css" />

03-23 17:56:56.350: I/System.out(9642143): , <script src="http://code.jquery.com/jquery-1.8.2.min.js"></script>
03-23 17:56:56.350: I/System.out(9642143): 
]

4 个答案:

答案 0 :(得分:2)

HashMap的 toString()版本或任何地图类都会创建一个带有[]的字符串。所以你无法帮助它。你可以做的最好的事情就是迭代地图并以你想要的方式自己打印价值。

如果您尝试在List中打印任何集合,例如List,Set或Map。

,则情况相同

例如:

    List<Integer> list = new ArrayList<Integer>();
    list.add(10);
    list.add(20);

    System.out.println(list);

    // Output is : [10, 20]

答案 1 :(得分:1)

看起来你依赖于某种东西的toString方法而没有覆盖它。您尚未告诉我们地图的value部分是什么。

您可能需要覆盖对象的toString方法,或者,如果该对象是另一个Collection,您可能还需要遍历该对象:

    final Map<String, Collection<String>> map = new HashMap<>();
    for(final Entry<String, Collection<String>> entry : map.entrySet()) {
        System.out.println(entry.getKey());
        for(final String value : entry.getValue()) {
            System.out.println(value);                
        }
    }

请注意,您可以使用增强型for循环来迭代Map,而不是循环键并为每个键调用get

答案 2 :(得分:1)

由于您只打算打印styles的值,所以不要打扰keySet。由于您是在循环中构造stylePlaceHolder,因此请使用StringBuilder,而不是String连接。并且,当你获得另一个值时,你的循环会抛弃每个值。

StringBuilder b = new StringBuilder();
for(String style: styles.valueSet()) {
    b.append(style).append("\n");
}
siteElements.add(b.toString());

libraries几乎相同。实际上,将上述大部分内容提取到一个方法中:

private String values(Map<?, ?> map) {
    StringBuilder b = new StringBuilder();
    for(Object value: map.valueSet()) {
        b.append(value).append("\n");
        // append can take an Object; it calls toString on it.
    }
    return b.toString();
}

为了加快工作速度,请考虑使用Google Guava及其Joiner课程。记住 - 没有人付钱给你写代码。你得到报酬来解决问题。

private String values(Map<?, ?> map) {
    return Joiner.on("\n").join(map.valueSet()) + "\n";
}

答案 3 :(得分:1)

不喜欢正则表达式吗?

    Map<String, String> map = new HashMap<>();
    map.put("key1", "value1");
    map.put("key2", "value2");
    map.put("key3", "value3");
    System.out.println(map.keySet());
    System.out.println(map.keySet().toString().replaceAll("[\\[\\],]", ""));
    System.out.println(map.values().toString().replaceAll("[\\[\\],]", ""));

输出:

[key3, key2, key1]
key3 key2 key1
value3 value2 value1