3

String次のコンパクトな方法を使用して:を作成したいと思います。

String attributes = null;
for (Map.Entry<String, String> kvp : attrs.entrySet())
  attributes += (kvp.getKey() + "='" + kvp.getValue() +"' ");

しかし、結果は次のような文字列になりますnullattr1='val1' attr2='val2' attr3='val3'。これは、現在の値がnullで+=あるに対して操作を実行した結果として発生していると思います。ループを通過するたびにnullであるStringかどうかを確認せずに、これを行うコンパクトな方法はありませんか?attributes

4

7 に答える 7

7
String attributes = "";

それを可能にし、5または20の値の小さなマップには問題ありません。より大きなマップの場合、StringBuilderまたは〜Bufferが次の方法です。

StringBuffer sb = new StringBuffer (estimatedSize);
for (X x: xx) 
     sb.append (foo).append (bar).append (baz);
String attributes = sb.toString ();
于 2012-04-24T22:07:14.963 に答える
4

Stringコードの先頭でを初期化するためにこれを行います。

String attributes = "";
于 2012-04-24T22:03:51.673 に答える
3

null空の文字列ではありません

""代わりにから始める必要がありnullます:

String attributes = "";
...

'...'必要がない場合、最もコンパクトな方法は

String attributes = "";
for (Map.Entry<String, String> kvp : attrs.entrySet())
  attributes += kvp + " ";

値が多い場合は、次StringBuilderの代わりに使用することもお勧めしStringます。

StringBuilder attributes = new StringBuilder();
for (Map.Entry<String, String> kvp : attrs.entrySet())
    attributes.append(kvp.getKey())
              .append("='")
              .append(kvp.getValue())
              .append("' ");
于 2012-04-24T22:04:45.760 に答える
2

String attributes = "";
for (Map.Entry kvp : attrs.entrySet())
  attributes += (kvp.getKey() + "='" + kvp.getValue() +"' ");
于 2012-04-24T22:03:59.347 に答える
1

言う代わりにString attributes = null;、ただ言うString attributes = "";

多くの文字列を追加する場合は、StringBuilderを調べることをお勧めします。これは、最後に新しいものを追加するたびにメモリの再割り当てが内部的に回避されるためです。これは+=です。

于 2012-04-24T22:05:03.777 に答える
1

他の誰もが正しいです。String最初は空の文字列に設定するだけですが、大量のデータから文字列を作成する場合は、StringBuilder文字列作成用に設計されたオブジェクトを使用することをお勧めします。

public String getString(Map<String, String> attrs)  {
    StringBuilder bldr = new StringBuilder();
    for (Map.Entry<String, String> kvp : attrs.entrySet()) {
        bldr.append(String.format("'%s'='%s' ", kvp.getKey(), kvp.getValue()));
    }
    return bldr.toString();
}
于 2012-04-24T22:08:55.930 に答える
0

次のように初期化attributesします。

String attributes = "";

編集済み

于 2012-04-24T22:04:21.483 に答える