CodeGym /Java Blog /ランダム /Java の Append() メソッド: StringBuilder と StringBuffer
John Squirrels
レベル 41
San Francisco

Java の Append() メソッド: StringBuilder と StringBuffer

ランダム グループに公開済み
append() は、現在のシーケンスに値を追加する StringBuilder クラスおよび StringBuffer クラスの Java メソッドです。append()メソッドが何であるか知らなかったとしても、おそらくすでに暗黙的にそれを使用しているでしょう。これは、Java で + 演算子を使用して文字列を連結したときに発生しました。重要なのは、Java の String 連結は StringBuilder または StringBuffer クラスとそのappend()メソッドを使用して実装されるということです。

String、StringBuffer、StringBuilder について簡単に説明します。

おそらくご存知のとおり、String クラスは Final (子クラスを持たない) であり、不変 (このクラスのインスタンスは作成後に変更できません) です。実際、String クラスの不変性により、各操作の結果として新しい文字列インスタンスが作成され、古い文字列インスタンスは破棄され、大量のガベージが生成されます。String オブジェクトの変更による一時的なガベージの生成に対処するには、StringBuffer クラスまたは StringBuilder クラスを使用できます。後者の 2 つの主な違いは、StringBuffer は同期されるのに対し、StringBuilder は同期されないことです。したがって、マルチスレッド環境で頻繁に変更される文字列には StringBuffer を使用し、シングルスレッド環境の場合は StringBuilder を使用します。Java の Append() メソッド: StringBuilder と StringBuffer - 1

StringBuilder および StringBuffer の Append()

append() は、StringBuilder クラスと StringBuffer クラスの最上位メソッドの 1 つです。現在のシーケンスに新しい値を追加します。StringBuffer クラスと StringBuilder クラスの両方に、 13 個のさまざまなオーバーロードされたappend()メソッドがあります。StringBuilder の append メソッドを見てみましょう。とにかく、StringBuffer の場合でもまったく同じように機能します。
  • public StringBuilder append(boolean b)
  • public StringBuilder append(char c)
  • public StringBuilder append(char[] str)
  • public StringBuilder append(char[] str, int offset, int len)
  • public StringBuilder append(CharSequence cs)
  • public StringBuilder append(CharSequence cs, int start, int end)
  • public StringBuilder append(double d)
  • public StringBuilder append(float f)
  • public StringBuilder append(int i)
  • public StringBuilder append(long lng)
  • public StringBuilder append(Object obj)
  • public StringBuilder append(String str)
  • public StringBuilder append(StringBuffer sb)
それらのいくつかを取り上げて、append()メソッドが正確に何をするのか例を挙げて説明しましょう。

Java.lang.StringBuilder.append(int i)

java.lang.StringBuilder.append(int i) は、既存の StringBuilder オブジェクトに整数を追加できるようにするメソッドです。Java.lang.StringBuilder.append(int i)の使用例を見てみましょう。

StringBuilder s = new StringBuilder(“I love Java ”);  
int i = 14;
//the method appends StringBuilder and integer   
s.append(i); 
System.out.println(s); 
ここでの出力は次のようになります。
Java 14 が大好きです
ここで何が起こったのでしょうか?まず、値「I love Java」を持つ s という名前の StringBuilder を作成しました。次に、 append(int)を使用して整数 14 を追加します。厳密に言えば、整数ではなく文字列「14」を追加し、「I love Java 14」に更新された StringBuilder 値を取得しました。したがって、このメソッドは引数を StringBuilder オブジェクトに変換し、それを既存の StringBuilder オブジェクトにバインドし、更新されたオブジェクトを返します。

Object、int、boolean、および String 引数の StringBuilder append() の例

数値、文字列、文字、または配列要素を含む他のすべてのオーバーロードされたメソッドについても、同じことが言えます。LegoBrick クラスと Color 列挙型を作成して、パブリックStringBuilder append(Object obj)メソッドをデモしましょう。

//enum with colors 
 public enum Color {
   RED, YELLOW, BLUE;
}
//LegoBrick Class code 
public class LegoBrick {
   Color color;
   boolean isConnected;

   public void connect() {
       System.out.println("This brick is connected");
       this.isConnected = true;
   }

   public void disconnect() {
       System.out.println("Disconnected");
       isConnected = false;
   }

   public LegoBrick(Color color, boolean isConnected) {
       this.color = color;
       this.isConnected = isConnected;
   }

   public Color getColor() {
       return color;
   }

   public boolean isConnected() {
       return isConnected;
   }

   @Override
   public String toString() {
       return "LegoBrick{" +
              "color=" + color +
              ", isConnected=" + isConnected +
              '}';
   }
}
次に、String、int、LegoBrick、および boolean を使用した基本的な StringBuilder の追加を示す AppendDemo クラスを作成しましょう。奇妙に聞こえますが、うまくいきます。

public class AppendDemo {

   public static void main(String[] args) {
       StringBuilder s = new StringBuilder("I love");
System.out.println(s)
//the method appends StringBuilder and String
       s.append(" Java");
       System.out.println(s);
//the method appends StringBuilder and int
       s.append(14);
       System.out.println(s);
       LegoBrick legoBrick = new LegoBrick(Color.RED, false);
//the method appends StringBuilder and LegoBrick 
       s.append(legoBrick);
       System.out.println(s);
//the method appends StringBuilder and boolean
       System.out.println(s.append(5<7));
   }
}
出力は次のとおりです。
Java が大好きです Java14 が大好きです Java14LegoBrick{color=RED, isConnected=false} が大好きです Java14LegoBrick{color=RED, isConnected=false}true が大好きです
まず、StringBuilder "I love" を作成して表示し、次にappend()メソッドを使用して String、int 数値、Object の String 表現、および boolean を順番に追加しました。

StringBuilder append(char[] cstr、int セット、int 長)

3 つのパラメータを持つappend()メソッドを見てみましょう。指定された char 配列の部分配列の表現を文字列に追加します。ここで:
  • cstrは追加される文字の配列です。
  • 追加する最初の文字のインデックスを設定します。
  • lengthは追加する文字数です。
他のappend()メソッドと同様に、このメソッドは展開された StringBuilder オブジェクトを返します。Java アプリ コードの一部として append(char[], cstr, int set, int length) を使用する例を次に示します。

public class AppendDemo {
   // an example of using append(char[], cStr, int set, int length)

   public static void main(String[] args) {
       StringBuilder s = new StringBuilder("I love ");
      //here is a char's array, part of which we are going to append to s
       char[] cStr = new char[]
               {'c', 'o', 'd', 'e', 'J', 'a', 'v', 'a', '1', '4'};
       //we append 4 elements of cStr from the 4th element "J"
       s.append(cStr, 4, 4);
       System.out.println(s);
   }
}
出力は次のとおりです。
ジャワが大好きです

CharSequence 引数を持つ StringBuilder append() メソッド

引数として CharSequence を持つ 2 つのメソッドに気づいたかもしれません。
  • public StringBuilder append(CharSequence cs)
  • public StringBuilder append(CharSequence cs, int start, int end)
すべての初心者が CharSequence がインターフェイスであることを知っているわけではありません。ドキュメントによると、CharSequence は読み取り可能な char 値のシーケンスであり、さまざまな種類の char シーケンスへの均一な読み取り専用アクセスを提供します。このインターフェイスは、String、StringBuffer、StringBuilder などの Java クラスによって実装されます。したがって、プログラムで String、StringBuffer、StringBuilder のどれを使用するのが良いかわからない場合は、CharSequence を使用できます。 StringBuilder append(CharSequence cs, int start, int end) は、append(char[] cstr, int set, int length)とほぼ同じように機能します。上で説明しました。ただし、このメソッドはサブシーケンスの最初の要素と最後の要素を指定します。start はサブシーケンスに含まれますが、end は含まれないことを覚えておくことが重要です (つまり、サブシーケンスの最後の要素は end の前にある要素です)。何故ですか?それは Java の場合とまったく同じです。CharSequence とは何か、 append(CharSequence cs)メソッドとappend(CharSequence cs, int start, int end)メソッドを示します。

public class CharSequenceDemo {

   public static void printCharSequence(CharSequence ch) {
       System.out.println(ch);
   }
       public static void main(String[] args) {
           CharSequence myString = new String("This is String ");
           printCharSequence(myString);
           CharSequence myStringBuilder = new StringBuilder("This is StringBuilder ");
           printCharSequence(myStringBuilder);
           StringBuilder s = new StringBuilder("my StringBuilder ");
//StringBuilder.append           
s.append(myStringBuilder);
           System.out.println(s);
//StringBuilder.append
           s.append(myString);
           System.out.println(s);
           s.append(myString, 5,7);
           System.out.println(s);
       }
   }
出力は次のとおりです。
これは String これは StringBuilder 私の StringBuilder これは StringBuilder 私の StringBuilder これは StringBuilder これは String 私の StringBuilder これは StringBuilder これは String です
2 つの CharSequence を作成し、String と StringBuilder をバインドして出力しました。CharSequence にはこのメソッドがないため、 append()メソッドを myStringBuilder に直接適用することはできません(理由がわからない場合は、参照型の拡張と縮小だけでなく継承についても理解する必要があります)。したがって、両方の CharSequence で StringBuilder を作成し、append メソッドを使用して順次連結します。最後に、StringBuilder にサブシーケンス「is」を追加しました (「i」は myStringBuilder の 5 番目の要素、s は 6 番目の要素です。このメソッドでは、end として指定された要素がサブシーケンスから除外されることに注意してください。

StringBuffer append() はどうでしょうか?

StringBuffer.appendにも 13 のメソッドのバリアントがあり、それらは StringBuilder とまったく同じように動作します。
  • public StringBuffer 追加 (ブール値 b)
  • public StringBuffer append (char c)
  • public StringBuffer append (char[] str)
  • public StringBuffer append (char[] str, int offset, int len)
  • public StringBuffer 追加 (double d)
  • public StringBuffer 追加 (float f)
  • public StringBuffer append (int i)
  • public StringBuffer 追加 (long lng)
  • public StringBuffer append (CharSequence s)
  • public StringBuffer append (CharSequence s, int start, int end)
  • public StringBuffer append (オブジェクト obj)
  • public StringBuffer append (String str)
  • public StringBuffer 追加 (StringBuffer sb)
部分文字列を結合するStringBuffer.appendの例を見てみましょう。StringBuilder の例を取り上げ、コード内のすべての StringBuilder を StringBuffers に変更します。

public class AppendDemo {
   // an example of using append(char[], cStr, int set, int length)

   public static void main(String[] args) {
       StringBuffer s = new StringBuffer("I love ");
      //here is a char's array, part of which we are going to append to s
       char[] cStr = new char[]
               {'c', 'o', 'd', 'e', 'J', 'a', 'v', 'a', '1', '4'};
       //we append 4 elements of cStr from the 4th element "J"
//with StringBuffer.append
       s.append(cStr, 4, 4);
       System.out.println(s);
//StringBuffer.append adds int 14 to s
s.append(14); 
System.out.println(s);
   }
}
出力は次のとおりです。
Java が大好き Java14 が大好き
この記事のすべての例でそれを行うことができます。彼らはうまくいきます!

結論

StringBuilder と StringBuffer はほとんどの関数を共有しているため、両方のクラスがappend()メソッドを使用する同様の方法を持っていることは驚くべきことではありません。これは開発者にとって朗報です。クラスごとに個別のメソッドを学習する必要はありません。そうは言っても、append()のさまざまな使用方法を考慮して、さまざまなデータ型の表現を文字列に追加する練習を数時間してください。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION