StringBuffer는 스레드 안전, 가변 문자 순서입니다. AbstractStringBuilder에서 물려 받고 charEdegence 인터페이스를 구현합니다.
StringBuilder는 또한 AbstractStringBuilder에서 상속 된 서브 클래스입니다. 그러나 StringBuilder와 StringBuffer는 다릅니다. 전자는 스레드가 아닌 반면, 후자는 스레드 안전입니다.
StringBuffer와 charSequence 간의 관계 다이어그램은 다음과 같습니다.
StringBuffer 클래스는 문자열과 같으며 문자열을 나타내는 데에도 사용됩니다. 그러나 StringBuffer의 내부 구현은 String과 다르기 때문에 StringBuffer는 문자열을 처리 할 때 새 개체를 생성하지 않으며 메모리 사용에서 String 클래스보다 낫습니다.
따라서 실제로 사용하면 삽입, 삭제 등과 같은 문자열을 수정 해야하는 경우 StringBuffer를 사용하는 것이 더 적합합니다.
StringBuffer 클래스에는 String 클래스와 동일한 많은 방법이 있습니다. 이러한 방법은 기능적으로 문자열 클래스의 함수와 동일합니다.
그러나 StringBuffer 객체의 각 수정이 객체 자체를 변경한다는 점에서 가장 중요한 차이점 중 하나가 있습니다. 이는 문자열 클래스와 가장 큰 차이입니다.
또한 StringBuffer는 스레드 안전이기 때문에 향후 스레드 개념을 소개하는 특별한 장이 있으므로 다중 스레드 프로그램에도 사용할 수 있지만 프로그램의 실행 효율은 비교적 느립니다.
0. StringBuffer 객체의 초기화
StringBuffer 객체의 초기화는 문자열 클래스의 초기화와 다릅니다. Java는 특별한 구문을 제공하며 정상적인 상황에서는 일반적으로 생성자를 사용하여 초기화하는 데 사용됩니다.
예를 들어:
StringBuffer s = new StringBuffer ();
이러한 방식으로 초기화 된 StringBuffer 객체는 빈 객체입니다.
컨텐츠로 StringBuffer 객체를 만들어야하는 경우 다음을 사용할 수 있습니다.
StringBuffer s = new StringBuffer ( "ABC");
이러한 방식으로 초기화 된 StringBuffer 객체의 내용은 String "ABC"입니다.
StringBuffer와 String은 다른 유형이며 직접 캐스트 할 수 없습니다. 다음 코드가 잘못되었습니다.
StringBuffer s = "ABC"; // 할당 유형이 stringBuffer s = (StringBuffer) "ABC"; // 상속 관계가 없으며 회전을 강요하는 것은 불가능합니다.
StringBuffer 객체와 문자열 객체 사이의 변환을위한 코드는 다음과 같습니다.
문자열 s = "abc"; StringBuffer sb1 = new StringBuffer ( "123"); StringBuffer sb2 = new StringBuffer (s); // 문자열 stringBufferstring으로 변환 s1 = sb1.toString (); // StringBuffer는 문자열로 변환합니다
1.StringBuffer 함수 목록
StringBuffer () StringBuffer (int 용량) StringBuffer (String String) StringBuffer (charSequence CS) StringBuffer Append (Boolean B) StringBuffer Append (int I) StringBuffer Append (Long L) StringBuffer Append (Float F) StringBuffer Append (Double D) Synchronized Stringbuffer Append (Char Char) Stringbuffer Append (char) chars) 동기화 된 StringBuffer Append (char [] chars, int start, int) 동기화 된 StringBuffer Append (Object OBJ) 동기화 된 StringBuffer Append (String String) 동기화 된 StringBuffer Append (StringBuffer SB) Synchronized StringBuffer Append (Charecedence Synchronized Stringbuffer) appendcodepoint (int codepoint) int capact () 동기화 된 char charat (int index) 동기화 된 int codepointat (int index) int index int index) 동기화 된 int codepointbefore (int index) int codepointCount (int beginIndex, int endIndex) synchronized stringbuffer delete (int int end) deletechonized stnetechonized stringbuff (int end) EnseRecApacity (int min) 동기화 된 void getChrics (int start, int end, char [] buffer, int idx) int indexof (String substring, int index) int indexof (String String) StringBuffer Insert (int Index, boolean b) Stringbuffer Insert (Int Index, Int I) Stringbuffer insert (int index, long l) stringbuffer 삽입 삽입 (Int Index, Double D) 동기화 된 StringBuffer Insert (int Index, Char Ch) 동기화 된 StringBuffer Insert (int index, char [] chars) 동기화 된 StringBuffer insert (int index, chars, int start, int length) 동기화 Stringbuffer Insert (int index, string) stringbuffer insert (object obj) synchronized snichbuffer insert charEdecence S) 동기화 된 StringBuffer Insert (int index, charEdecence s, int start, int end) int lastIndexof (String String) 동기화 된 int lastIndexof (String substring, int start) int length () int thepsetbycodepoints (int index, int end) synchronized string repler (int strest, string). Reverse () 동기화 된 void setcharat (int index, char ch) 동기화 된 void setlength (int length) 동기화 된 charEdgeence 후속 (int start, int int) 동기화 된 문자열 서브 스트링 (int start) 동기화 된 문자열 하위 스트링 (int start, int) 동기화 된 스트링 trimtosize ()
2. StringBuffer 예제
소스 코드는 다음과 같습니다 (StringBufferTest.java) :
/*** StringBuffer 데모 프로그램*/import java.util.hashmap; public class StringBufferTest {public static void main (String [] args) {testinsertapis (); testAppendapis (); TestReplaceApis (); testDeleteApis (); testIndexApis (); testotherapis (); } /** * Other API examples of StringBuffer*/ private static void testOtherAPIs() { System.out.println("-------------------------------- testOtherAPIs --------------------------------"); StringBuffer sbuilder = new StringBuffer ( "0123456789"); int cap = sbuilder.capacity (); System.out.printf ( "cap =%d/n", 캡); char c = sbuilder.charat (6); System.out.printf ( "C =%C/N", C); char [] carr = new char [4]; sbuilder.getchars (3, 7, Carr, 0); for (int i = 0; i <carr.length; i ++) system.out.printf ( "carr [%d] =%c", i, carr [i]); System.out.println (); System.out.println (); } / *** StringBuffer 中 index 相关 api 演示* / private static void testIndexApis () {System.out.println ( "-------------------------------------------------------------------------------------------------------------------------------------------OOIOOOOOOOOO색 ( StringBuffer sbuilder = new StringBuffer ( "abcabcabcabcabcabcabcabc"); System.out.printf ( "sbuilder =%s/n", sbuilder); // 1. 앞쪽에서 앞뒤로 "BC"가 처음으로 "BC"가 나타나는 위치를 찾으십시오 .out.out.printf ( " %-30s = %d/n", "sbuilder.indexof (/"bc/")", sbuilder.indexof ( "bc")); // 2. 위치 5에서 앞쪽에서 뒤로, 처음으로 "bc"가 나타나는 위치를 찾으십시오. out.printf ( " %-30s = %d/n", "sbuilder.indexof (/"bc/", 5)", sbuilder.indexof ( "BC", 5)); // 3. 뒤로 앞서서, 처음으로 "bc"가 처음으로 System.out.out.printf ( " %-30s = %d/n", "sbuilder.lastindexof (/"bc/")", sbuilder.lastindexof ( "bc")를 찾으십시오. // 4. 뒤로 앞서서, 처음으로 "bc"가 처음으로 System.out.out.printf ( " %-30s = %d/n", "sbuilder.lastindexof (/"bc/", 4)", sbuilder.lastindexof ( "bc", 4))를 찾으십시오. System.out.println (); } / *** StringBuffer 的 replace () 示例* / private static void testreplaceapis () {System.out.println ( "----------------------------------------------------------------------------------------------------------------------------------------- KOIOUOIOOIOS 주 주 주목함색 !보OUPOIPIS () {System.out StringBuffer Sbuilder; sbuilder = new StringBuffer ( "0123456789"); sbuilder.replace (0, 3, "abcde"); System.out.printf ( "sbuilder =%s/n", sbuilder); sbuilder = new StringBuffer ( "0123456789"); sbuilder.reverse (); System.out.printf ( "sbuilder =%s/n", sbuilder); sbuilder = new StringBuffer ( "0123456789"); sbuilder.setcharat (0, 'm'); System.out.printf ( "sbuilder =%s/n", sbuilder); System.out.println (); } / *** StringBuffer delete () 예제* / private static void testDeleteApis () { System.out.println("------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- sbuilder.deletecharat (0). str2 = sbuilder.substring (3, 5); // sb str3 = (String) sbuilder.subsequence (3, 5)에서 위치 3 (포함)에서 위치를 가져옵니다. System.out.printf ( "sbuilder =%s/nstr1 =%s/nstr2 =%s/nstr3 =%s/n", sbuilder, str1, str2, str3); System.out.println (); } / *** insert () stringBuffer* / private static void testInsertapis () { System.out.println("---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 0은 문자 배열의 시작 위치를 나타냅니다. 3은 sbuilder.insert를 나타냅니다 sbuilder.insert (0, 100) 삽입 (0, 100); '/N'); // int sbuilder.insert (0, 100) 삽입; // long sbuilder.insert (0, 12345L) 삽입; // stringBuilder 객체 sbuilder.insert (0, new StringBuffer ( "StringBuilder") 삽입; // 위치 0. 6에 StringBuilder 객체를 삽입하여 위치 0, 13에 삽입 된 객체의 시작 위치 (포함)는 끝 위치 (제외) sbuilder.insert (0, new StringBuffer ( "StringBuilder"), 6, 13); // 위치 0. sbuilder.insert (0, new StringBuffer ( "StringBuffer"))에 StringBuffer 개체를 삽입; // 위치 0. 6에 StringBuffer 객체를 삽입하십시오. 위치 0, 12에 삽입 된 객체의 시작 위치 (포함)는 끝 위치 (제외) sbuilder.insert (0, new StringBuffer ( "StringBuffer"), 6, 12); // 위치 0에서 문자열 객체를 삽입합니다. sbuilder.insert (0, "String"); // 위치 0에서 문자열 객체를 삽입합니다. 1은 위치 0, 6에 삽입 된 객체의 시작 위치 (포함)를 나타냅니다. sbuilder.insert (0, '/n'); // 객체 객체를 위치 0에 삽입합니다. map.put ( "1", "one"); map.put ( "2", "two"); map.put ( "3", "Three"); sbuilder.insert (0, 맵); System.out.printf ( "%s/n/n", sbuilder); } / *** StringBuffer 的 accend () 示例* / private static void testappendapis () {System.out.println ( "--------------------------------------------------------------------------------------------------------------------------------------- KOIOUOOOOOOOOH 주 및색 주 보작 testAptApenDapis () 주 보작 testAptApenDapis StringBuffer sbuilder = new StringBuffer (); // 문자 배열 SBUILDER.Append (new char [] { 'a', 'b', 'c', 'd', 'e'}); // 문자 배열을 추가하십시오. 0은 문자 배열의 시작 위치를 나타냅니다. 3은 길이 sbuilder.append (new char [] { 'a', 'b', 'c', 'd', 'e'}, 0, 3)을 나타냅니다. // float sbuilder.append (1.414f); // double sbuilder.append (3.14159d); // 부울 sbuilder.append (true); // char sbuilder.append ( '/n'); // int sbuilder.Append (100); // Long Sbuilder.Append (12345L); // StringBuilder 개체 SBUILDER.Append (new StringBuffer ( "StringBuilder")); // StringBuilder 객체를 추가하십시오. 도 6은 추가 된 객체의 시작 위치 (포함)를 나타냅니다. 13은 끝 위치 (제외) sbuilder.append (new StringBuffer ( "StringBuilder"), 6, 13); // StringBuffer 객체를 추가하십시오. sbuilder.append (new StringBuffer ( "StringBuffer")); // StringBuffer 객체를 추가하십시오. 도 6은 추가 된 객체의 시작 위치 (포함)를 나타냅니다. 12는 끝 위치 (제외) sbuilder.append (new StringBuffer ( "StringBuffer"), 6, 12); // 문자열 객체를 추가하십시오. sbuilder.append ( "String"); // 문자열 객체를 추가하십시오. 도 1은 추가 된 객체의 시작 위치 (포함)를 나타내며, 6은 끝 위치 (제외) sbuilder.append ( "0123456789", 1, 6); sbuilder.append ( '/n'); // 객체 객체를 추가하십시오. 여기서 우리는 해시 맵을 예제로 hashmap map = new hashmap ()로 가져갑니다. map.put ( "1", "one"); map.put ( "2", "two"); map.put ( "3", "Three"); sbuilder.append (지도); sbuilder.append ( '/n'); // 유니 코드 인코딩 sbuilder.appendCodePoint (0x5B57); // 0x5b57은 sbuilder.appendcodepoint (0x7b26)를 인코딩하는 유니 코드입니다. // 0x7b26은 sbuilder.appendcodepoint (0x7f16)를 인코딩하는 유니 코드입니다. // 0x7f16은 "인코딩 된"유니 코드 인코딩 sbuilder.appendcodepoint (0x7801)입니다. // 0x7801은 "인코딩 된"유니 코드 인코딩 시스템입니다. out.printf ( "%s/n/n", sbuilder); }} 실행 결과 :
-------------------------------- testInsertAPIs -------------------------------{3=three, 2=two, 1=one}12345StringBUFFERStringBufferBUILDERStringBuilder12345100true3.141591.414ABCabcde-------------------------------- testAppendAPIs ---------------------------- ABCDEABC1.4143.14159TRUE10012345STRINGBUILDERBUILDERSTRINGBUFFERBUFFERSTRING12345 {3 = 3, 2 = 2, 1} 문자 인코딩 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------sbuilder=abcAbcABCabCaBcAbCaBCabcsbuilder.indexOf("bc") = 1sbuilder.indexOf("bc", 5) = 22sbuilder.lastIndexOf("bc") = 22sbuilder.lastIndexOf("bc", 4) = 4-------------------------------- testotherapis ---------------------------- 캡 = 26c = 6carr [0] = 3 carr [1] = 4 carr [2] = 5 carr [3] = 6