CodeGym/Java блог/Случаен/Метод Append() в Java: StringBuilder и StringBuffer
John Squirrels
Ниво
San Francisco

Метод Append() в Java: StringBuilder и StringBuffer

Публикувано в групата
append() е Java метод на класове StringBuilder и StringBuffer, който добавя няHowва стойност към текуща последователност. Дори и да не знаете Howво представлява методът append() , вероятно вече сте го използвали имплицитно. Това се случи, когато сте свързали низове в Java с помощта на оператора +. Въпросът е, че конкатенацията на низове в Java се реализира с помощта на класа StringBuilder or StringBuffer и техния метод append() .

Много накратко за String, StringBuffer и StringBuilder

Както вероятно знаете класът String е окончателен (няма дъщерни класове) и неизменен (екземплярите на този клас не могат да бъдат модифицирани след създаването). Всъщност, поради неизменността на класа String, в резултат на всяка операция се създават нови екземпляри на низове, а старите се изхвърлят, което генерира много боклук. За да се справите с генерирането на временен боклук поради модификации на обекта String, можете да използвате класовете StringBuffer or StringBuilder. Основната разлика между последните две е, че StringBuffer е синхронизиран, докато StringBuilder не е. Следователно използвайте StringBuffer за низове, които ще бъдат модифицирани често в многонишкова среда и StringBuilder в случай на еднонишкова среда.Метод Append() в Java: StringBuilder и StringBuffer - 1

Append() в StringBuilder и StringBuffer

append() е един от най-добрите методи на класовете StringBuilder и StringBuffer. Той добавя нова стойност към текущата последователност. Има 13 различни претоварени метода append() Howто в класовете StringBuffer, така и в StringBuilder. Нека да разгледаме метода append за StringBuilder. Както и да е, те работят точно по същия начин в случай на StringBuffer.
  • публичен StringBuilder добавяне (булев b)
  • публично добавяне на StringBuilder (char c)
  • public StringBuilder append(char[] str)
  • public StringBuilder append(char[] str, int offset, int len)
  • публично добавяне на StringBuilder (CharSequence cs)
  • публичен StringBuilder добавяне (CharSequence cs, int начало, int край)
  • публичен StringBuilder добавяне (двойно d)
  • публичен StringBuilder добавяне (float f)
  • публичен StringBuilder добавяне (int i)
  • публично добавяне на StringBuilder (дълъг lng)
  • публично добавяне на StringBuilder (Object obj)
  • публично добавяне на StringBuilder (String str)
  • публично добавяне на StringBuilder (StringBuffer sb)
Нека да разгледаме някои от тях и да обясним с примери Howво точно прави методът 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
Какво е станало тук? Първо създадохме StringBuilder с име s със стойността „I love Java“. След това добави към него цяло число 14 с помощта на append(int) . Строго погледнато, добавихме не цяло число, а низа "14" и получихме актуализирана стойност на StringBuilder на "I love Java 14". По този начин методът превръща аргумента в StringBuilder обект, свързва го със съществуващ StringBuilder обект и връща актуализиран такъв.

StringBuilder append() пример за аргумент Object, int, boolean и String

Същата история ще бъде и с всички останали претоварени методи с елементи число, низ, символ or масиви. Нека създадем LegoBrick Class and Color enum, за да демонстрираме публичния метод 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 +
              '}';
   }
}
Сега нека създадем AppendDemo Class, където ще покажем добавянето на основен StringBuilder със String, int, LegoBrick и boolean. Звучи странно, но работи!
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 „Обичам“, след това Първо, след което последователно добавихме към него с помощта на метода append() String, int число, String представяне на обект и boolean.

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

Нека да разгледаме метода append() с три параметъра. Той добавя представяне на подмасив на даден масив от символи към низа. Така че тук:
  • cstr е масив от знаци, които трябва да бъдат добавени
  • задайте индекса на първия символ, който ще бъде добавен
  • дължината е количеството знаци за добавяне.
Подобно на други методи append() , този връща разширен StringBuilder обект. Ето пример за използване на append(char[], cstr, int set, int length) като част от codeа на 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);
   }
}
Резултатът е:
Обичам Java

StringBuilder append() методи с аргумент CharSequence

Може да сте забелязали два метода, които имат CharSequence като аргументи.
  • публично добавяне на StringBuilder (CharSequence cs)
  • публичен StringBuilder добавяне (CharSequence cs, int начало, int край)
Не всички начинаещи знаят, че CharSequence е интерфейс. Според documentацията CharSequence е четима последователност от char стойности и осигурява единен достъп само за четене до много различни видове char последователности. Интерфейсът се изпълнява от такива Java класове като String, StringBuffer, StringBuilder и други. Така че, ако не знаете Howво е по-добре да използвате във вашата програма, String, StringBuffer or StringBuilder, можете да използвате CharSequence. StringBuilder append(CharSequence cs, int start, int end) работи почти като append(char[] cstr, int set, int length)обсъдихме по-горе. Този метод обаче указва първия елемент от подпоследователността и последния. Важно е да запомните, че началото е включено в подпоследователността, но краят не е (т.е. последният елемент в подпоследователността е елементът, който идва преди края). Защо така? Точно така е в Java. Нека демонстрираме Howво е 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 е
Създадохме две CharSequence, свързахме String и StringBuilder с тях и ги отпечатахме. Не можем да приложим метода append() директно към myStringBuilder, тъй като CharSequence няма този метод (ако не разбирате защо, трябва да разберете за наследяването, Howто и за разширяването и стесняването на референтните типове). Следователно, ние създаваме StringBuilder с и свързваме с помощта на метода append последователно с CharSequence. В края добавихме нашия StringBuilder с подпоследователност „is“ („i“ е 5-ти елемент на myStringBuilder и s е 6-ти. Не забравяйте, че в метода елементът, посочен като end, е изключен от подпоследователността.

Какво ще кажете за StringBuffer append()?

StringBuffer.append също има 13 варианта на метода и те работят точно по същия начин като StringBuilder.
  • публично добавяне на StringBuffer (булев b)
  • публично добавяне на StringBuffer (char c)
  • public StringBuffer append​(char[] str)
  • public StringBuffer append​(char[] str, int offset, int len)
  • публично добавяне на StringBuffer (двойно d)
  • публичен StringBuffer добавяне (float f)
  • публично добавяне на StringBuffer (int i)
  • публично добавяне на StringBuffer (дълъг lng)
  • публично добавяне на StringBuffer (CharSequence s)
  • публично добавяне на StringBuffer (CharSequence s, int начало, int край)
  • публично добавяне на StringBuffer (Object obj)
  • публично добавяне на StringBuffer (String str)
  • публично добавяне на StringBuffer (StringBuffer sb)
Нека имаме пример за StringBuffer.append за присъединяване към подниз. Просто вземаме примера на StringBuilder и променяме всички StringBuilder в codeа на 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() , не забравяйте да отделите няколко часа практика за добавяне на представяния на различни типове данни към низ.
Коментари
  • Популярен
  • Нов
  • Стар
Трябва да сте влезли, за да оставите коментар
Тази страница все още няма коментари