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