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() バージョンは、[] を含む文字列を作成します。だからあなたはそれを助けることはできません。あなたができる最善のことは、マップを繰り返し処理し、値を自分の好きなように印刷することです。

List、Set、Map などの Java で任意のコレクションを印刷しようとする場合も同様です。

例:

    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);                
        }
    }

Map拡張されたforループを使用すると、キーをループして各キーを呼び出すよりもはるかに効率的に反復処理できることに注意してください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();
}

作業を高速化するには、代わりにGoogleGuavaとその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 に答える