web-dev-qa-db-ja.com

StringBufferおよびStringBuilderでの警告

StringBufferをforループの外部で初期化し、forループの内部でいくつかの文字列を連結しています。

警告が出ます

「StringBuffer stringBuffer」は「StringBuilder」として宣言できます

そして

'stringbuilder.append()'呼び出しの引数としての文字列連結

次に、StringBufferよりも比較的高速であるため、そのStringBufferをStringBuilderに変更しました。今、私は警告を受けています

'stringbuilder.append()'呼び出しの引数としての文字列連結

サンプルコード:

public static String stringConcat(String[] words) {
    StringBuffer stringBuffer = new StringBuffer();
    for (String Word : words) {
        stringBuffer.append(Word).append(" ");
    }
    return stringBuffer.toString();
}

なぜこれらの警告が表示されるのですか。

実際のコードを編集:

stringBuffer.append(Word.substring(0, 1).toUpperCase() + Word.substring(1).toLowerCase()).append(" ");
17
Abish R

重要なのは、式の文字列にappend()に与える+演算子をまだ使用していることです。

_... Word.substring(0, 1).toUpperCase() + Word...
_

これは、StringBuilder(またはStringBuffer)を使用する全体のポイントを無効にします。

代わりに、単にappend()を2回呼び出すだけです!バッファー/ビルダーを使用することの核となる考え方は、追加呼び出しのみを使用して希望の結果を連結することです。お気に入り:

_append(Word.substring(0, 1).toUpperCase()).append(Word...
_

StringBuilderの代わりにStringBufferを使用します

 public static String stringConcat(String[] words) {
    StringBuilder stringBuilder = new StringBuilder();

    for (String Word : words) {
        stringBuilder.append(Word).append(" ");
    }
    return stringBuilder.toString();
  }
6
user2025187