CodeGym /Blog Java /Ngẫu nhiên /Phương thức Append() trong Java: StringBuilder và StringB...

Phương thức Append() trong Java: StringBuilder và StringBuffer

Xuất bản trong nhóm
append() là một phương thức Java của các lớp StringBuilder và StringBuffer nối thêm một số giá trị vào chuỗi hiện tại. Ngay cả khi bạn không biết phương thức append() là gì, thì có lẽ bạn đã ngầm sử dụng nó rồi. Điều này xảy ra khi bạn nối các Chuỗi trong Java bằng toán tử +. Vấn đề là nối Chuỗi trong Java được triển khai bằng cách sử dụng lớp StringBuilder hoặc StringBuffer và phương thức append() của chúng .

Rất ngắn gọn về String, StringBuffer và StringBuilder

Như bạn có thể biết lớp Chuỗi là cuối cùng (nó không có lớp con) và không thay đổi (các thể hiện của lớp này không thể được sửa đổi sau khi tạo). Trên thực tế, do tính bất biến của lớp String, các thể hiện chuỗi mới được tạo ra sau mỗi thao tác và các thể hiện cũ bị loại bỏ, tạo ra rất nhiều rác. Để xử lý việc tạo ra rác tạm thời do sửa đổi đối tượng String, bạn có thể sử dụng các lớp StringBuffer hoặc StringBuilder. Sự khác biệt chính giữa hai cái sau là StringBuffer được Đồng bộ hóa trong khi StringBuilder thì không. Do đó, hãy sử dụng StringBuffer cho các chuỗi sẽ được sửa đổi thường xuyên trong môi trường đa luồng và StringBuilder trong trường hợp môi trường đơn luồng.Phương thức Append() trong Java: StringBuilder và StringBuffer - 1

Nối () trong StringBuilder và StringBuffer

append() là một trong những phương thức hàng đầu của các lớp StringBuilder và StringBuffer. Nó nối thêm một giá trị mới vào chuỗi hiện tại. Có 13 phương thức append() quá tải khác nhau trong cả hai lớp StringBuffer và StringBuilder. Hãy xem phương thức chắp thêm cho StringBuilder. Dù sao, chúng hoạt động giống hệt nhau trong trường hợp StringBuffer.
  • nối thêm StringBuilder công khai (boolean b)
  • nối thêm StringBuilder công khai (char c)
  • nối thêm StringBuilder công khai (char [] str)
  • nối thêm StringBuilder công khai (char [] str, int offset, int len)
  • nối thêm StringBuilder công khai (CharSequence cs)
  • nối thêm StringBuilder công khai (CharSequence cs, int start, int end)
  • nối thêm StringBuilder công khai (gấp đôi d)
  • nối thêm StringBuilder công khai (float f)
  • nối thêm StringBuilder công khai (int i)
  • nối thêm StringBuilder công khai (dài lng)
  • nối thêm StringBuilder công khai (Object obj)
  • nối thêm StringBuilder công khai (Chuỗi str)
  • nối thêm StringBuilder công khai (StringBuffer sb)
Hãy xem qua một số trong số chúng và giải thích bằng các ví dụ chính xác phương thức append() thực hiện chức năng gì.

Java.lang.StringBuilder.append(int i)

java.lang.StringBuilder.append(int i) là một phương thức cho phép nối thêm một số nguyên vào một đối tượng StringBuilder hiện có. Chúng ta hãy xem các ví dụ về việc sử dụng 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); 
Đầu ra ở đây sẽ là:
Tôi yêu Java 14
Điều gì đã xảy ra ở đây? Đầu tiên, chúng ta tạo một StringBuilder có tên s với giá trị "I love Java". Sau đó, thêm vào đó một số nguyên 14 bằng cách sử dụng append(int) . Nói một cách chính xác, chúng tôi đã thêm không phải số nguyên, mà là chuỗi "14" và nhận được giá trị StringBuilder được cập nhật thành "Tôi yêu Java 14". Do đó, phương thức biến đối số thành một đối tượng StringBuilder, liên kết nó với một đối tượng StringBuilder hiện có và trả về một đối tượng được cập nhật.

StringBuilder append() ví dụ cho đối số Object, int, boolean và String

Câu chuyện tương tự sẽ xảy ra với tất cả các phương thức quá tải khác với các phần tử số, chuỗi, ký tự hoặc mảng. Hãy tạo một LegoBrick Class và Color enum để minh họa phương thức 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 +
              '}';
   }
}
Bây giờ, hãy tạo một Lớp AppendDemo nơi chúng tôi sẽ hiển thị việc nối thêm một StringBuilder cơ bản với String, int, LegoBrick và boolean. Nghe có vẻ lạ, nhưng nó hoạt động!

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));
   }
}
Đầu ra là:
Tôi yêu Tôi yêu Java Tôi yêu Java14 Tôi yêu Java14LegoBrick{color=RED, isConnected=false} Tôi yêu Java14LegoBrick{color=RED, isConnected=false}true
Đầu tiên, chúng tôi đã tạo và hiển thị StringBuilder "Tôi yêu", sau đó Đầu tiên, chúng tôi tuần tự thêm vào nó bằng cách sử dụng phương thức append() một Chuỗi, một số int, một biểu diễn Chuỗi của một Đối tượng và một boolean.

Nối thêm StringBuilder(char[] cstr, int set, int length)

Hãy xem xét phương thức append() với ba tham số. Nó thêm một đại diện của một mảng con của một mảng char đã cho vào chuỗi. Nên ở đây:
  • cstr là một mảng các ký tự được thêm vào
  • đặt chỉ mục của ký tự đầu tiên được nối thêm
  • chiều dài là số lượng ký tự để nối thêm.
Tương tự như các phương thức append() khác , phương thức này trả về một đối tượng StringBuilder mở rộng. Đây là một ví dụ về việc sử dụng append(char[], cstr, int set, int length) như một phần của mã ứng dụng 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);
   }
}
Đầu ra là:
tôi yêu Java

Các phương thức nối thêm StringBuilder() với đối số CharSequence

Bạn có thể nhận thấy hai phương thức có CharSequence làm đối số của chúng.
  • nối thêm StringBuilder công khai (CharSequence cs)
  • nối thêm StringBuilder công khai (CharSequence cs, int start, int end)
Không phải tất cả những người mới bắt đầu đều biết rằng CharSequence là một Giao diện. Theo tài liệu CharSequence là một chuỗi các giá trị char có thể đọc được và cung cấp quyền truy cập thống nhất, chỉ đọc vào nhiều loại chuỗi char khác nhau. Giao diện được triển khai bởi các Lớp Java như String, StringBuffer, StringBuilder, v.v. Vì vậy, nếu bạn không biết cái gì tốt hơn để sử dụng trong chương trình của mình, String, StringBuffer hoặc StringBuilder, bạn có thể sử dụng CharSequence. StringBuilder append(CharSequence cs, int start, int end) hoạt động gần như append(char[] cstr, int set, int length)chúng tôi đã thảo luận ở trên. Tuy nhiên, phương thức này chỉ định phần tử đầu tiên của dãy con và phần tử cuối cùng. Điều quan trọng cần nhớ là bắt đầu được bao gồm trong dãy con, nhưng kết thúc thì không (nghĩa là phần tử cuối cùng trong chuỗi con là phần tử đứng trước phần cuối). Tại sao vậy? Nó chỉ giống như trong Java. Hãy chứng minh CharSequence là gì và các phương thức 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);
       }
   }
Đầu ra là:
Đây là chuỗi Đây là StringBuilder StringBuilder của tôi Đây là StringBuilder StringBuilder của tôi Đây là StringBuilder Đây là String StringBuilder của tôi Đây là StringBuilder Đây là String là
Chúng tôi đã tạo hai CharSequences, String và StringBuilder liên kết với chúng và in chúng ra. Chúng ta không thể áp dụng trực tiếp phương thức append() cho myStringBuilder, vì CharSequence không có phương thức này (nếu chưa hiểu tại sao, bạn cần tìm hiểu về tính kế thừa cũng như mở rộng và thu hẹp các kiểu tham chiếu). Do đó, chúng tôi tạo một StringBuilder với và nối tuần tự bằng cách sử dụng phương thức append với cả CharSequence. Cuối cùng, chúng tôi đã thêm StringBuilder của mình với chuỗi con “is” (“i” là phần tử thứ 5 của myStringBuilder và s là phần tử thứ 6. Hãy nhớ rằng trong phương thức này, phần tử được chỉ định là end bị loại trừ khỏi chuỗi con.

Còn StringBuffer append() thì sao?

StringBuffer.append cũng có 13 biến thể của phương thức và chúng hoạt động giống hệt như StringBuilder.
  • nối thêm StringBuffer công khai​(boolean b)
  • nối thêm StringBuffer công khai​(char c)
  • nối thêm StringBuffer công khai​(char[] str)
  • nối thêm StringBuffer công khai​(char[] str, int offset, int len)
  • nối thêm StringBuffer công khai​(double d)
  • nối thêm StringBuffer công khai​(float f)
  • nối thêm StringBuffer công khai​(int i)
  • nối thêm StringBuffer công khai​(long lng)
  • nối thêm StringBuffer công khai​(CharSequence s)
  • public StringBuffer append​(CharSequence s, int start, int end)
  • nối thêm StringBuffer công khai​(Object obj)
  • nối thêm StringBuffer công khai​(String str)
  • nối thêm StringBuffer công khai​(StringBuffer sb)
Hãy lấy một ví dụ về StringBuffer.append để nối một chuỗi con. Chúng tôi chỉ lấy ví dụ về StringBuilder và thay đổi tất cả StringBuilders trong mã thành 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);
   }
}
Đầu ra là:
Tôi yêu Java Tôi yêu Java14
Bạn có thể làm điều đó với mọi ví dụ của bài viết này. Họ sẽ làm việc!

Phần kết luận

Vì StringBuilder và StringBuffer chia sẻ hầu hết các chức năng nên không có gì ngạc nhiên khi cả hai lớp đều có cách sử dụng phương thức append() giống nhau . Đó là tin tốt cho các nhà phát triển — bạn không cần phải học các phương thức riêng biệt cho từng lớp. Phải nói rằng, khi xem xét nhiều cách khác nhau để sử dụng append() , hãy đảm bảo dành vài giờ thực hành để thêm các biểu diễn của các loại dữ liệu khác nhau vào một chuỗi.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION