CodeGym/Blog Java/Aleatoriu/Metoda Append() în Java: StringBuilder și StringBuffer
John Squirrels
Nivel
San Francisco

Metoda Append() în Java: StringBuilder și StringBuffer

Publicat în grup
append() este o metodă Java a claselor StringBuilder și StringBuffer care adaugă o anumită valoare unei secvențe curente. Chiar dacă nu știai ce este metoda append() , probabil că deja ai folosit-o implicit. Acest lucru s-a întâmplat când ați concatenat șiruri de caractere în Java folosind operatorul +. Ideea este că concatenarea șirurilor în Java este implementată folosind clasa StringBuilder sau StringBuffer și metoda lor append() .

Foarte pe scurt despre String, StringBuffer și StringBuilder

După cum probabil știți, clasa String este finală (nu are clase copil) și imuabilă (instanțele acestei clase nu pot fi modificate după creare). De fapt, datorită imuabilității clasei String, în urma fiecărei operațiuni sunt create noi instanțe de șir, iar cele vechi sunt aruncate, generând mult gunoi. Pentru a face față generării de gunoi temporar din cauza modificărilor aduse obiectului String, puteți utiliza clasele StringBuffer sau StringBuilder. Principala diferență dintre ultimele două este că StringBuffer este sincronizat în timp ce StringBuilder nu este. Prin urmare, utilizați StringBuffer pentru șirurile care vor fi modificate frecvent într-un mediu cu mai multe fire și StringBuilder în cazul unui mediu cu un singur thread.Metoda Append() în Java: StringBuilder și StringBuffer - 1

Append() în StringBuilder și StringBuffer

append() este una dintre metodele de top ale claselor StringBuilder și StringBuffer. Se adaugă o nouă valoare secvenței curente. Există 13 metode diferite supraîncărcate append() în ambele clase StringBuffer și StringBuilder. Să ne uităm la metoda de adăugare pentru StringBuilder. Oricum, ele funcționează exact la fel în cazul StringBuffer.
  • public StringBuilder append(boolean b)
  • public StringBuilder append(car 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 anexează (dublu d)
  • public StringBuilder append(float f)
  • public StringBuilder append(int i)
  • public StringBuilder append (long lng)
  • public StringBuilder append (Obiect obiect)
  • public StringBuilder append(String str)
  • public StringBuilder append(StringBuffer sb)
Să trecem peste unele dintre ele și să explicăm cu exemple ce face exact metoda append() .

Java.lang.StringBuilder.append(int i)

java.lang.StringBuilder.append(int i) este o metodă care permite adăugarea unui număr întreg la un obiect StringBuilder existent. Să aruncăm o privire la exemplele de utilizare a 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);
Rezultatul de aici va fi:
Îmi place Java 14
Ce s-a intamplat aici? Mai întâi, am creat un StringBuilder numit s cu valoarea „I love Java”. Apoi i-a adăugat un număr întreg 14 folosind append(int) . Strict vorbind, nu am adăugat un număr întreg, ci șirul „14” și am primit o valoare StringBuilder actualizată la „Iubesc Java 14”. Astfel, metoda transformă argumentul într-un obiect StringBuilder, îl leagă la un obiect StringBuilder existent și returnează unul actualizat.

Exemplu StringBuilder append() pentru Object, int, boolean și argument String

Aceeași poveste va fi cu toate celelalte metode supraîncărcate cu elemente de număr, șir, caractere sau matrice. Să creăm o enumerare LegoBrick Class și Color pentru a demonstra metoda publică 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 +
              '}';
   }
}
Acum să creăm o clasă AppendDemo în care vom arăta adăugarea unui StringBuilder de bază cu String, int, LegoBrick și boolean. Sună ciudat, dar funcționează!
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));
   }
}
Ieșirea este:
Iubesc Iubesc Java Iubesc Java14 Iubesc Java14LegoBrick{color=RED, isConnected=false} Iubesc Java14LegoBrick{color=RED, isConnected=false}true
Mai întâi, am creat și afișat StringBuilder „I love”, apoi Mai întâi, apoi adăugat secvențial la el folosind metoda append() un String, un număr int, o reprezentare String a unui obiect și un boolean.

StringBuilder append(char[] cstr, int set, int lungime)

Să ne uităm la metoda append() cu trei parametri. Acesta adaugă o reprezentare a unui subbary a unei matrice de caractere date la șir. Deci aici:
  • cstr este o matrice de caractere de adăugat
  • setați -l ca index al primului caracter care urmează să fie adăugat
  • lungimea este cantitatea de caractere de adăugat.
Similar altor metode append() , aceasta returnează un obiect StringBuilder extins. Iată un exemplu de utilizare a append(char[], cstr, int set, int length) ca parte a codului aplicației Java.
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);
   }
}
Ieșirea este:
Iubesc Java

Metode StringBuilder append() cu argument CharSequence

Este posibil să fi observat două metode care au CharSequence drept argumente.
  • public StringBuilder append(CharSequence cs)
  • public StringBuilder append (CharSequence cs, int start, int end)
Nu toți începătorii știu că CharSequence este o interfață. Conform documentației , CharSequence este o secvență care poate fi citită de valori char și oferă acces uniform, numai în citire, la multe tipuri diferite de secvențe de caractere. Interfața este implementată de clase Java precum String, StringBuffer, StringBuilder și multe altele. Deci, dacă nu știți ce este mai bine să utilizați în programul dvs., String, StringBuffer sau StringBuilder, puteți utiliza CharSequence. StringBuilder append(CharSequence cs, int start, int end) funcționează aproape ca append(char[] cstr, int set, int lungime)am discutat mai sus. Cu toate acestea, această metodă specifică primul element al subsecvenței și ultimul. Este important să ne amintim că startul este inclus în subsecvență, dar sfârșitul nu este (adică ultimul element din subsecvență este elementul care vine înainte de sfârșit). De ce este asta? Este exact așa cum este în Java. Să demonstrăm ce este CharSequence și metodele append(CharSequence cs) și 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);
       }
   }
Ieșirea este:
Acesta este String Acesta este StringBuilder my StringBuilder Acesta este StringBuilder my StringBuilder Acesta este StringBuilder Acesta este String My StringBuilder Acesta este StringBuilder Acesta este String este
Am creat două CharSequences, le-am legat String și StringBuilder și le-am imprimat. Nu putem aplica metoda append() direct la myStringBuilder, deoarece CharSequence nu are această metodă (dacă nu înțelegeți de ce, trebuie să vă dați seama despre moștenire, precum și despre extinderea și restrângerea tipurilor de referință). Prin urmare, creăm un StringBuilder și concatenăm folosind metoda append secvenţial cu ambele CharSequence. La sfârșit am adăugat StringBuilder-ul nostru cu subsecvența „is” (“i” este un al 5-lea element al myStringBuilder și s este al 6-lea. Rețineți că în metodă, elementul specificat ca end este exclus din subsecvență.

Dar StringBuffer append()?

StringBuffer.append are și 13 variante ale metodei și funcționează exact la fel ca StringBuilder.
  • public StringBuffer append​(boolean b)
  • public StringBuffer append​(car c)
  • public StringBuffer append​(char[] str)
  • public StringBuffer append​(char[] str, int offset, int len)
  • public StringBuffer append​(d dublu)
  • public StringBuffer append​(float f)
  • public StringBuffer append​(int i)
  • public StringBuffer append​(long lng)
  • public StringBuffer append​(CharSequence s)
  • public StringBuffer append​(CharSequence s, int start, int end)
  • public StringBuffer append​(obiect obiect)
  • public StringBuffer append​(String str)
  • public StringBuffer append​(StringBuffer sb)
Să avem un exemplu de StringBuffer.append pentru alăturarea unui subșir. Luăm doar exemplul StringBuilder și schimbăm toate StringBuilders din cod în 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);
   }
}
Ieșirea este:
Iubesc Java Iubesc Java14
O poți face cu fiecare exemplu din acest articol. Vor funcționa!

Concluzie

Deoarece StringBuilder și StringBuffer partajează majoritatea funcțiilor, nu este surprinzător faptul că ambele clase au moduri similare de a folosi metoda append() . Aceasta este o veste bună pentru dezvoltatori - nu trebuie să înveți metode separate pentru fiecare clasă. Acestea fiind spuse, având în vedere varietatea de moduri de a folosi append() , asigurați-vă că puneți câteva ore de practică în adăugarea reprezentărilor diferitelor tipuri de date într-un șir.
Comentarii
  • Popular
  • Nou
  • Vechi
Trebuie să fii conectat pentru a lăsa un comentariu
Această pagină nu are încă niciun comentariu