0

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

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

4 回答 4

2

HashMap 或任何地图类的toString() 版本会创建一个带有 [] 的字符串。所以你无能为力。您可以做的最好的事情是遍历地图并以您想要的方式自行打印值。

如果您尝试在 Java 中打印任何集合,例如 List、Set 或 Map,情况也是如此。

例如:

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

    System.out.println(list);

    // Output is : [10, 20]
于 2013-03-23T21:08:03.537 回答
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 循环来迭代 aMap比遍历键并调用get每个键更有效。

于 2013-03-23T21:22:11.107 回答
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";
}
于 2013-03-23T21:23:49.723 回答
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
于 2013-03-23T22:25:31.853 回答