CodeGym/Java Blog/무작위의/Java의 Append() 메서드: StringBuilder 및 StringBuffer
John Squirrels
레벨 41
San Francisco

Java의 Append() 메서드: StringBuilder 및 StringBuffer

무작위의 그룹에 게시되었습니다
회원
append() 는 현재 시퀀스에 일부 값을 추가하는 StringBuilder 및 StringBuffer 클래스의 Java 메서드입니다. append() 메서드가 무엇인지 모르더라도 암시적으로 이미 사용했을 것입니다. 이것은 + 연산자를 사용하여 Java에서 문자열을 연결할 때 발생했습니다. 요점은 Java의 문자열 연결이 StringBuilder 또는 StringBuffer 클래스와 해당 append() 메서드를 사용하여 구현된다는 것입니다.

String, StringBuffer 및 StringBuilder에 대한 매우 간략한 설명

아시다시피 String 클래스는 최종 클래스(하위 클래스가 없음)이며 변경할 수 없습니다(이 클래스의 인스턴스는 생성 후 수정할 수 없음). 실제로 String 클래스의 불변성으로 인해 각 작업의 결과로 새로운 문자열 인스턴스가 생성되고 이전 인스턴스는 폐기되어 많은 가비지를 생성합니다. String 개체 수정으로 인한 임시 가비지 생성을 처리하기 위해 StringBuffer 또는 StringBuilder 클래스를 사용할 수 있습니다. 후자의 두 가지 주요 차이점은 StringBuffer가 동기화되는 반면 StringBuilder는 동기화되지 않는다는 것입니다. 따라서 멀티스레드 환경에서 자주 변경되는 스트링은 StringBuffer를, 싱글스레드 환경에서는 StringBuilder를 사용한다.Java의 Append() 메서드: StringBuilder 및 StringBuffer - 1

StringBuilder 및 StringBuffer의 Append()

append()는 StringBuilder 및 StringBuffer 클래스의 최상위 메서드 중 하나입니다. 현재 시퀀스에 새 값을 추가합니다. StringBuffer 및 StringBuilder 클래스 모두에 13개의 다양한 오버로드된 append() 메서드가 있습니다 . StringBuilder의 추가 방법을 살펴보겠습니다. 어쨌든 StringBuffer의 경우에는 정확히 동일하게 작동합니다.
  • 공개 StringBuilder 추가(부울 b)
  • 공개 StringBuilder 추가(문자 c)
  • 공개 StringBuilder 추가(char[] str)
  • 공개 StringBuilder 추가(char[] str, int 오프셋, int len)
  • 공개 StringBuilder 추가(CharSequence cs)
  • 공개 StringBuilder 추가(CharSequence cs, int 시작, int 끝)
  • 공개 StringBuilder 추가(double d)
  • 공개 StringBuilder 추가(float f)
  • 공개 StringBuilder 추가(int i)
  • 공개 StringBuilder 추가(long lng)
  • 공개 StringBuilder 추가(개체 obj)
  • 공개 StringBuilder 추가(문자열 str)
  • 공개 StringBuilder 추가(StringBuffer sb)
그 중 일부를 살펴보고 정확히 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);
출력은 다음과 같습니다.
나는 자바 14를 사랑
여기 뭔 일 있었 니? 먼저 "I love Java"라는 값을 가진 s라는 StringBuilder를 만들었습니다. 그런 다음 append(int) 를 사용하여 정수 14를 추가했습니다 . 엄밀히 말하면 정수가 아니라 문자열 "14"를 추가했고 "I love Java 14"로 업데이트된 StringBuilder 값을 얻었습니다. 따라서 메서드는 인수를 StringBuilder 개체로 바꾸고 기존 StringBuilder 개체에 바인딩한 다음 업데이트된 개체를 반환합니다.

Object, int, boolean 및 String 인수에 대한 StringBuilder append() 예제

같은 이야기가 숫자, 문자열, 문자 또는 배열 요소가 있는 다른 모든 오버로드된 메서드에 적용됩니다. 공용 StringBuilder append(Object obj) 메서드 를 시연하기 위해 LegoBrick 클래스 및 색상 열거형을 만들어 보겠습니다 .
//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 +
              '}';
   }
}
이제 String, int, LegoBrick 및 boolean을 사용하여 기본 StringBuilder를 추가하는 것을 보여줄 AppendDemo 클래스를 생성해 보겠습니다. 이상하게 들리지만 작동합니다!
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 "I love"를 생성하고 표시한 다음, 먼저 append() 메서드를 사용하여 String, int 숫자, 객체의 String 표현 및 부울을 순차적으로 추가했습니다.

StringBuilder 추가(char[] cstr, int 세트, int 길이)

세 개의 매개변수가 있는 append() 메서드를 살펴보겠습니다 . 주어진 문자 배열의 하위 배열 표현을 문자열에 추가합니다. 그래서 여기:
  • cstr 은 추가할 문자 배열입니다.
  • 추가할 첫 번째 문자의 인덱스를 설정합니다 .
  • 길이 는 추가할 문자의 양입니다.
다른 append() 메서드와 유사하게 이 메서드는 확장된 StringBuilder 객체를 반환합니다. 다음은 Java 앱 코드의 일부로 append(char[], cstr, int set, int length) 를 사용하는 예입니다 .
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);
   }
}
출력은 다음과 같습니다.
나는 자바를 사랑

CharSequence 인수가 있는 StringBuilder append() 메서드

인수로 CharSequence가 있는 두 가지 메서드를 보셨을 것입니다.
  • 공개 StringBuilder 추가(CharSequence cs)
  • 공개 StringBuilder 추가(CharSequence cs, int 시작, int 끝)
모든 초보자가 CharSequence가 인터페이스라는 것을 아는 것은 아닙니다. 설명서 에 따르면 CharSequence는 읽을 수 있는 문자 값 시퀀스이며 다양한 종류의 문자 시퀀스에 대한 균일한 읽기 전용 액세스를 제공합니다. 인터페이스는 String, StringBuffer, StringBuilder 등과 같은 Java 클래스에 의해 구현됩니다. 따라서 프로그램에서 String, StringBuffer 또는 StringBuilder 중 어떤 것을 사용하는 것이 더 좋은지 모른다면 CharSequence를 사용할 수 있습니다. StringBuilder append(CharSequence cs, int start, int end)는 거의 append(char[] cstr, int set, int length) 처럼 작동합니다.위에서 논의했습니다. 그러나 이 메서드는 하위 시퀀스의 첫 번째 요소와 마지막 요소를 지정합니다. start는 하위 시퀀스에 포함되지만 end는 포함되지 않는다는 점을 기억하는 것이 중요합니다(즉, 하위 시퀀스의 마지막 요소는 end 앞에 오는 요소임). 왜 그런 겁니까? Java의 방식입니다. 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입니다. 이것은 String입니다. 이것은 String입니다. 이것은 StringBuilder입니다. 이것은 String입니다.
우리는 두 개의 CharSequences를 만들고 String과 StringBuilder를 바인딩하고 출력했습니다. CharSequence에는 이 메서드가 없기 때문에 myStringBuilder에 직접 append() 메서드를 적용할 수 없습니다 (이유를 이해하지 못하는 경우 상속과 참조 유형의 확장 및 축소에 대해 파악해야 함). 따라서 CharSequence와 순차적으로 추가 메서드를 사용하여 StringBuilder를 만들고 연결합니다. 마지막에 StringBuilder에 하위 시퀀스 "is"를 추가했습니다("i"는 myStringBuilder의 5번째 요소이고 s는 6번째입니다. 메서드에서 end로 지정된 요소는 하위 시퀀스에서 제외된다는 점을 기억하세요.

StringBuffer 추가()는 어떻습니까?

StringBuffer.append 에는 메서드의 13가지 변형이 있으며 StringBuilder와 정확히 동일한 방식으로 작동합니다.
  • 공개 StringBuffer 추가(부울 b)
  • 공개 StringBuffer 추가(문자 c)
  • 공개 StringBuffer 추가(char[] str)
  • 공개 StringBuffer 추가(char[] str, int 오프셋, int len)
  • 공개 StringBuffer 추가(double d)
  • 공개 StringBuffer 추가(float f)
  • 공개 StringBuffer 추가(int i)
  • 공개 StringBuffer 추가(long lng)
  • 공개 StringBuffer 추가(CharSequence s)
  • 공개 StringBuffer 추가(CharSequence s, int 시작, int 끝)
  • 공개 StringBuffer 추가(개체 obj)
  • 공개 StringBuffer 추가(문자열 str)
  • 공개 StringBuffer 추가(StringBuffer sb)
하위 문자열을 결합하는 StringBuffer.append 의 예를 살펴보겠습니다 . StringBuilder 예제를 가져와서 코드의 모든 StringBuilders를 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() 를 사용하는 다양한 방법을 고려하여 다양한 데이터 유형의 표현을 문자열에 추가하는 연습을 몇 시간씩 해야 합니다.
코멘트
  • 인기
  • 신규
  • 이전
코멘트를 남기려면 로그인 해야 합니다
이 페이지에는 아직 코멘트가 없습니다