CodeGym /Java blog /Tilfældig /Append()-metode i Java: StringBuilder og StringBuffer
John Squirrels
Niveau
San Francisco

Append()-metode i Java: StringBuilder og StringBuffer

Udgivet i gruppen
append() er en Java-metode for StringBuilder- og StringBuffer-klasser, der tilføjer en værdi til en aktuel sekvens. Selvom du ikke vidste, hvad append()- metoden er, har du sandsynligvis allerede brugt den implicit. Dette skete, da du sammenkædede strenge i Java ved hjælp af +-operatoren. Pointen er, at String-sammenkædning i Java er implementeret ved hjælp af StringBuilder- eller StringBuffer-klassen og deres append()- metode.

Meget kort om String, StringBuffer og StringBuilder

Som du sikkert ved, er String-klassen endelig (den har ingen underordnede klasser) og uforanderlig (forekomster af denne klasse kan ikke ændres efter oprettelsen). Faktisk, på grund af String-klassens uforanderlighed, oprettes nye strenginstanser som et resultat af hver operation, og gamle kasseres, hvilket genererer en masse affald. For at håndtere genereringen af ​​midlertidigt skrald på grund af ændringer af String-objektet, kan du bruge StringBuffer- eller StringBuilder-klasserne. Den største forskel mellem de to sidstnævnte er, at StringBuffer er synkroniseret, mens StringBuilder ikke er det. Brug derfor StringBuffer til strenge, der ofte vil blive ændret i et multi-threaded miljø, og StringBuilder i tilfælde af et enkelt-threaded miljø.Append()-metode i Java: StringBuilder og StringBuffer - 1

Append() i StringBuilder og StringBuffer

append() er en af ​​de bedste metoder i StringBuilder- og StringBuffer-klasserne. Den tilføjer en ny værdi til den aktuelle sekvens. Der er 13 forskellige overbelastede append() metoder i både StringBuffer og StringBuilder klasser. Lad os se på tilføjelsesmetoden til StringBuilder. I hvert fald fungerer de nøjagtigt det samme i tilfælde af StringBuffer.
  • public StringBuilder append(boolesk b)
  • public StringBuilder tilføj (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 tilføj (dobbelt d)
  • public StringBuilder tilføj(float f)
  • public StringBuilder append(int i)
  • public StringBuilder tilføj (lang lng)
  • public StringBuilder tilføj (Object obj)
  • public StringBuilder append(String str)
  • public StringBuilder append(StringBuffer sb)
Lad os gennemgå nogle af dem og forklare med eksempler, hvad append() -metoden præcis gør.

Java.lang.StringBuilder.append(int i)

java.lang.StringBuilder.append(int i) er en metode, der gør det muligt at tilføje et heltal til et eksisterende StringBuilder-objekt. Lad os tage et kig på eksemplerne på brug af 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); 
Output her vil være:
Jeg elsker Java 14
Hvad skete der her? Først oprettede vi en StringBuilder ved navn s med værdien "Jeg elsker Java". Føjede derefter et heltal 14 til det ved hjælp af append(int) . Strengt taget tilføjede vi ikke et heltal, men strengen "14" og fik en opdateret StringBuilder-værdi til "Jeg elsker Java 14". Således gør metoden argumentet til et StringBuilder-objekt, binder det til et eksisterende StringBuilder-objekt og returnerer et opdateret.

StringBuilder append() eksempel for Object, int, boolean og String argument

Den samme historie vil være med alle de andre overbelastede metoder med tal, streng, char eller arrays-elementer. Lad os oprette en LegoBrick-klasse- og farveliste for at demonstrere den offentlige StringBuilder append(Object obj) metode.

//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 +
              '}';
   }
}
Lad os nu oprette en AppendDemo-klasse, hvor vi vil vise tilføjelse af en grundlæggende StringBuilder med String, int, LegoBrick og boolean. Det lyder mærkeligt, men det virker!

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));
   }
}
Udgangen er:
Jeg elsker Jeg elsker Java Jeg elsker Java14 Jeg elsker Java14LegoBrick{color=RED, isConnected=false} Jeg elsker Java14LegoBrick{color=RED, isConnected=false}true
Først oprettede og viste vi StringBuilder "I love", derefter føjede vi først sekventielt til den ved hjælp af append() metoden en String, et int tal, en String repræsentation af et objekt og en boolean.

StringBuilder tilføj(char[] cstr, int sæt, int længde)

Lad os se på append() -metoden med tre parametre. Det tilføjer en repræsentation af en underarray af en given char-array til strengen. Så her:
  • cstr er en række tegn, der skal tilføjes
  • sæt det til indekset for det første tegn, der skal tilføjes
  • længde er antallet af tegn, der skal tilføjes.
På samme måde som andre append()- metoder returnerer denne et udvidet StringBuilder-objekt. Her er et eksempel på at bruge append(char[], cstr, int set, int length) som en del af Java-app-koden.

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);
   }
}
Udgangen er:
Jeg elsker Java

StringBuilder append() metoder med CharSequence argument

Du har måske bemærket to metoder, der har CharSequence som deres argumenter.
  • public StringBuilder append(CharSequence cs)
  • public StringBuilder append(CharSequence cs, int start, int end)
Ikke alle begyndere ved, at CharSequence er en grænseflade. Ifølge dokumentation er CharSequence en læsbar sekvens af char-værdier og giver ensartet, skrivebeskyttet adgang til mange forskellige slags char-sekvenser. Interfacet er implementeret af sådanne Java-klasser som String, StringBuffer, StringBuilder og mere. Så hvis du ikke ved, hvad der er bedre at bruge i dit program, String, StringBuffer eller StringBuilder, kan du bruge CharSequence. StringBuilder append(CharSequence cs, int start, int end) fungerer næsten som append(char[] cstr, int set, int længde)vi diskuterede ovenfor. Denne metode specificerer dog det første element i undersekvensen og det sidste. Det er vigtigt at huske, at start er inkluderet i underfølgen, men slutning er ikke (det vil sige, at det sidste element i underfølgen er det element, der kommer før slutningen). Hvorfor det? Sådan er det bare i Java. Lad os demonstrere, hvad CharSequence er og tilføje(CharSequence cs) og append(CharSequence cs, int start, int end) metoder.

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);
       }
   }
Udgangen er:
Dette er String Dette er StringBuilder min StringBuilder Dette er StringBuilder min StringBuilder Dette er StringBuilder Dette er String min StringBuilder Dette er StringBuilder Dette er String er
Vi oprettede to CharSequences, bundede String og StringBuilder til dem og printede dem ud. Vi kan ikke anvende append() metoden direkte på myStringBuilder, da CharSequence ikke har denne metode (hvis du ikke forstår hvorfor, skal du finde ud af om arv samt udvidelse og indsnævring af referencetyper). Derfor opretter vi en StringBuilder med og sammenkæder ved hjælp af append-metoden sekventielt med både CharSequence. Til sidst tilføjede vi vores StringBuilder med efterfølgen "is" ("i" er et 5. element i myStringBuilder og s er det 6.. Husk, at i metoden er det element, der er angivet som end, udelukket fra undersekvensen.

Hvad med StringBuffer append()?

StringBuffer.append har også 13 varianter af metoden, og de fungerer på nøjagtig samme måde som StringBuilder.
  • public StringBuffer tilføj​(boolesk b)
  • offentlig StringBuffer tilføj (char c)
  • public StringBuffer append​(char[] str)
  • public StringBuffer append​(char[] str, int offset, int len)
  • offentlig StringBuffer tilføj​(dobbelt d)
  • public StringBuffer tilføj​(float f)
  • public StringBuffer tilføj​(int i)
  • public StringBuffer tilføj​(lang lng)
  • public StringBuffer tilføj​(CharSequence s)
  • public StringBuffer append​(CharSequence s, int start, int end)
  • public StringBuffer tilføj​(Object obj)
  • public StringBuffer append​(String str)
  • public StringBuffer tilføj​(StringBuffer sb)
Lad os få et eksempel på StringBuffer.append for at forbinde en understreng. Vi tager bare StringBuilder-eksemplet og ændrer alle StringBuilders i kode til 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);
   }
}
Udgangen er:
Jeg elsker Java Jeg elsker Java14
Du kan gøre det med hvert eksempel i denne artikel. De vil virke!

Konklusion

Da StringBuilder og StringBuffer deler de fleste funktioner, er det ingen overraskelse, at begge klasser har lignende måder at bruge append()- metoden på. Det er gode nyheder for udviklere - du behøver ikke at lære separate metoder for hver klasse. Når det er sagt, i betragtning af de mange forskellige måder at bruge append() på, så sørg for at lægge et par timers øvelse i at tilføje repræsentationer af forskellige datatyper til en streng.
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION