CodeGym /Java blogg /Slumpmässig /Metoden Append() i Java: StringBuilder och StringBuffer
John Squirrels
Nivå
San Francisco

Metoden Append() i Java: StringBuilder och StringBuffer

Publicerad i gruppen
append() är en Java-metod för klasserna StringBuilder och StringBuffer som lägger till ett värde till en aktuell sekvens. Även om du inte visste vad append() -metoden är, har du förmodligen redan använt den implicit. Detta hände när du sammanfogade strängar i Java med operatorn +. Poängen är att strängsammansättning i Java implementeras med klassen StringBuilder eller StringBuffer och deras append()- metod.

Mycket kortfattat om String, StringBuffer och StringBuilder

Som du säkert vet är String-klassen slutlig (den har inga underordnade klasser) och oföränderlig (instanser av denna klass kan inte ändras efter skapandet). Faktum är att, på grund av String-klassens oföränderlighet, skapas nya stränginstanser som ett resultat av varje operation, och gamla kasseras, vilket genererar mycket skräp. För att hantera genereringen av tillfälligt skräp på grund av modifieringar av String-objektet kan du använda klasserna StringBuffer eller StringBuilder. Den största skillnaden mellan de två sistnämnda är att StringBuffer är Synchronized medan StringBuilder inte är det. Använd därför StringBuffer för strängar som kommer att modifieras ofta i en flertrådig miljö och StringBuilder i en enkeltrådig miljö.Append() Metod i Java: StringBuilder och StringBuffer - 1

Append() i StringBuilder och StringBuffer

append() är en av de bästa metoderna för klasserna StringBuilder och StringBuffer. Den lägger till ett nytt värde till den aktuella sekvensen. Det finns 13 olika överbelastade append() -metoder i både StringBuffer- och StringBuilder-klasserna. Låt oss titta på append-metoden för StringBuilder. Hur som helst, de fungerar exakt likadant när det gäller StringBuffer.
  • public StringBuilder append(boolesk 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(dubbel d)
  • public StringBuilder append(float f)
  • public StringBuilder append(int i)
  • public StringBuilder append(lång lng)
  • public StringBuilder append(Object obj)
  • public StringBuilder append(String str)
  • public StringBuilder append(StringBuffer sb)
Låt oss gå igenom några av dem och förklara med exempel vad exakt append()- metoden gör.

Java.lang.StringBuilder.append(int i)

java.lang.StringBuilder.append(int i) är en metod som gör det möjligt att lägga till ett heltal till ett befintligt StringBuilder-objekt. Låt oss ta en titt på exemplen på att använda 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); 
Utgången här blir:
Jag älskar Java 14
Vad hände här? Först skapade vi en StringBuilder med namnet s med värdet "I love Java". Lägg sedan till ett heltal 14 med append(int) . Strängt taget lade vi inte till ett heltal, utan strängen "14" och fick ett uppdaterat StringBuilder-värde till "Jag älskar Java 14". Således förvandlar metoden argumentet till ett StringBuilder-objekt, binder det till ett befintligt StringBuilder-objekt och returnerar ett uppdaterat.

StringBuilder append() exempel för Object, int, boolean och String-argument

Samma historia kommer att vara med alla andra överbelastade metoder med nummer, sträng, char eller arrayelement. Låt oss skapa en LegoBrick Class and Color enum för att demonstrera den offentliga StringBuilder append(Object obj) -metoden.

//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 +
              '}';
   }
}
Låt oss nu skapa en AppendDemo Class där vi kommer att visa tillägg av en grundläggande StringBuilder med String, int, LegoBrick och boolean. Låter konstigt, men det fungerar!

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));
   }
}
Utgången är:
Jag älskar Jag älskar Java Jag älskar Java14 Jag älskar Java14LegoBrick{color=RED, isConnected=false} Jag älskar Java14LegoBrick{color=RED, isConnected=false}true
Först skapade och visade vi StringBuilder "I love", sedan först läggs det till sekventiellt med append()- metoden en String, ett int-nummer, en String-representation av ett objekt och en boolean.

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

Låt oss titta på metoden append() med tre parametrar. Den lägger till en representation av en undergrupp av en given char-array till strängen. Så här:
  • cstr är en uppsättning tecken som ska läggas till
  • ställ in indexet för det första tecknet som ska läggas till
  • längd är antalet tecken som ska läggas till.
På samma sätt som andra append() -metoder returnerar den här ett utökat StringBuilder-objekt. Här är ett exempel på att använda append(char[], cstr, int set, int length) som en del av Java-appkoden.

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);
   }
}
Utgången är:
Jag älskar Java

StringBuilder append()-metoder med CharSequence-argument

Du kanske har lagt märke till två metoder som har CharSequence som argument.
  • public StringBuilder append(CharSequence cs)
  • public StringBuilder append(CharSequence cs, int start, int end)
Inte alla nybörjare vet att CharSequence är ett gränssnitt. Enligt dokumentation är CharSequence en läsbar sekvens av char-värden och ger enhetlig, skrivskyddad tillgång till många olika typer av char-sekvenser. Gränssnittet implementeras av sådana Java-klasser som String, StringBuffer, StringBuilder och mer. Så om du inte vet vad som är bättre att använda i ditt program, String, StringBuffer eller StringBuilder kan du använda CharSequence. StringBuilder append(CharSequence cs, int start, int end) fungerar nästan som append(char[] cstr, int set, int length)vi diskuterade ovan. Denna metod specificerar dock det första elementet i undersekvensen och det sista. Det är viktigt att komma ihåg att start ingår i delföljden, men slut är det inte (det vill säga det sista elementet i delföljden är elementet som kommer före slutet). Varför är det så? Det är precis som det är i Java. Låt oss demonstrera vad CharSequence är och append(CharSequence cs) och 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);
       }
   }
Utgången är:
Detta är String Detta är StringBuilder min StringBuilder Detta är StringBuilder min StringBuilder Detta är StringBuilder Det här är String min StringBuilder Det här är StringBuilder Det här är String är
Vi skapade två CharSequences, band String och StringBuilder till dem och skrev ut dem. Vi kan inte applicera metoden append() direkt på myStringBuilder, eftersom CharSequence inte har den här metoden (om du inte förstår varför, måste du ta reda på om arv samt utvidgning och försmalning av referenstyper). Därför skapar vi en StringBuilder med och sammanfogar med hjälp av append-metoden sekventiellt med både CharSequence. I slutet lade vi till vår StringBuilder med underföljden "is" ("i" är ett 5:e element i myStringBuilder och s är det 6:e. Kom ihåg att i metoden är elementet som anges som end exkluderat från undersekvensen.

Hur är det med StringBuffer append()?

StringBuffer.append har också 13 varianter av metoden och de fungerar precis på samma sätt som StringBuilder.
  • public StringBuffer tillägg​(booleskt b)
  • public StringBuffer tillägg (char c)
  • public StringBuffer append​(char[] str)
  • public StringBuffer append​(char[] str, int offset, int len)
  • public StringBuffer tillägg​(dubbel d)
  • public StringBuffer append​(float f)
  • public StringBuffer tillägg (int i)
  • public StringBuffer tillägg (lång lng)
  • public StringBuffer tillägg​(CharSequence s)
  • public StringBuffer append​(CharSequence s, int start, int end)
  • public StringBuffer tillägg​(Object obj)
  • public StringBuffer append​(String str)
  • public StringBuffer tillägg​(StringBuffer sb)
Låt oss ta ett exempel på StringBuffer.append för att ansluta en delsträng. Vi tar bara StringBuilder-exemplet och ändrar alla StringBuilders i kod till 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);
   }
}
Utgången är:
Jag älskar Java Jag älskar Java14
Du kan göra det med alla exempel i den här artikeln. De kommer att fungera!

Slutsats

Eftersom StringBuilder och StringBuffer delar de flesta funktioner är det ingen överraskning att båda klasserna har liknande sätt att använda append()- metoden. Det är goda nyheter för utvecklare - du behöver inte lära dig separata metoder för varje klass. Med det sagt, med tanke på de många olika sätten att använda append() , se till att lägga ner några timmars träning på att lägga till representationerna av olika datatyper i en sträng.
Kommentarer
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION