"안녕하세요, 아미고!"

"안녕, 리시!"

"이제 흥미로운 것을 배우기에 문자열에 대해 충분히 알고 있습니다. 더 구체적으로 말하면 String 클래스와 유사하지만 정확히 동일하지는 않은 새로운 클래스입니다."

"흥미롭게 들리지만 일반 문자열이 어떻게 부족하고 다른 문자열과 같은 클래스가 필요한지 완전히 명확하지 않습니다."

"문자열이 Java에서 불변 객체라는 사실부터 시작하겠습니다."

"어때요? 잊어버렸어요... 아니면 처음부터 몰랐어요..."

"불변 객체는 생성된 후에 상태를 변경할 수 없는 객체라는 점을 상기시켜 드리겠습니다."

"아... Java에서 문자열을 변경할 수 없는 이유는 무엇입니까?"

"이것은 String 클래스를 고도로 최적화하고 모든 곳에서 사용할 수 있도록 하기 위해 수행되었습니다. 예를 들어 HashMap 컬렉션의 키로 사용할 때는 변경 불가능한 유형만 권장됩니다 .

"그러나 프로그래머가 String 클래스를 변경할 수 있는 것이 더 편리하다고 생각하는 상황이 종종 발생합니다. 그들은 메서드 중 하나가 호출될 때마다 새 하위 문자열을 생성하지 않는 클래스를 원합니다."

"근데 뭐가 좋은데?"

"음, 아주 큰 문자열이 있고 그 끝에 무언가를 자주 추가해야 한다고 가정해 봅시다. 이 경우에는 문자 모음( )이 지속적으로 ArrayList<Character>문자열 개체를 다시 만들고 연결하는 것보다 더 효율적일 수 있습니다."

"그래서 String 클래스가 아닌 문자열이 필요한 거죠?"

"그렇습니다. Java 언어에 문자열과 같은 변경 가능한 유형이 추가되었습니다. StringBuilder"라고 합니다.

개체 만들기

"기존 문자열을 기반으로 객체를 생성하려면 StringBuilder다음과 같은 명령문을 실행해야 합니다.

StringBuilder name = new StringBuilder(string);

"빈 변경 가능 문자열을 만들려면 다음과 같은 명령문을 사용해야 합니다.

StringBuilder name = new StringBuilder();

방법 목록

"이 StringBuilder수업에는 24가지 유용한 방법이 있습니다. 가장 중요한 방법은 다음과 같습니다.

방법 설명
StringBuilder append(obj)
전달된 객체를 문자열로 변환하고 현재 문자열에 추가합니다.
StringBuilder insert(int index, obj)
전달된 객체를 문자열로 변환하여 현재 문자열의 중간에 삽입
StringBuilder replace(int start, int end, String str)
start..end 간격으로 지정된 문자열 부분을 전달된 문자열로 바꿉니다.
StringBuilder deleteCharAt(int index)
문자열에서 지정된 인덱스를 가진 문자를 제거합니다.
StringBuilder delete(int start, int end)
문자열에서 지정된 간격 내의 문자를 제거합니다.
int indexOf(String str, int index)
현재 문자열에서 하위 문자열을 검색합니다.
int lastIndexOf(String str, int index)
끝에서 시작하여 현재 문자열에서 하위 문자열을 검색합니다.
char charAt(int index)
전달된 인덱스에 있는 문자열의 문자를 반환합니다.
String substring(int start, int end)
지정된 간격으로 정의된 하위 문자열을 반환합니다.
StringBuilder reverse()
현재 문자열을 뒤집습니다.
void setCharAt(int index, char)
지정된 인덱스의 문자를 전달된 문자로 변경합니다.
int length()
문자열의 길이를 문자로 반환

"이제 각 방법에 대해 간단히 설명하겠습니다.

문자열에 추가

"변경 가능한 문자열( StringBuilder) 에 무언가를 추가하려면 append()메소드를 사용하십시오. 예:

암호 설명
StringBuilder builder = new StringBuilder("Hi");
builder.append("Bye");
builder.append(123);
Hi
HiBye
HiBye123

표준 문자열로 변환

" StringBuilder개체를 String 개체로 변환하려면 메서드를 호출하기만 하면 됩니다 toString(). 예

암호 산출
StringBuilder builder = new StringBuilder("Hi");
builder.append(123);
String result = builder.toString();
System.out.println(result);
Hi123

캐릭터는 어떻게 삭제하나요?

"변경 가능한 문자열에서 문자를 삭제하려면 메서드를 사용해야 합니다 deleteCharAt(). 예:

암호 산출
StringBuilder builder = new StringBuilder("Hello");
builder.deleteCharAt(2);
String result = builder.toString();
System.out.println(result);
Helo

문자열의 일부를 다른 문자열로 바꾸려면 어떻게 합니까?

"이를 위한 방법이 있습니다 replace(int begin, int end, String str). 예:

암호 산출
StringBuilder builder = new StringBuilder("Mellow");
builder.replace(2, 5, "Hello!");
String result = builder.toString();
System.out.println(result);
MeHello!w

"편리하군요. 감사합니다, 리시."

"말하지 마. 이건 어때, 줄을 거꾸로 뒤집을 수 있어? 어떻게 할 건데?"

"글쎄... 나는 을 생성하고 StringBuilder그 안에 문자열을 넣을 것입니다... 그런 다음 새 문자열을 만들고 마지막 문자에서 첫 번째 문자까지 루프에서... 아니면 비트 시프트...

"나쁘지 않습니다. 하지만 더 빠를 수 있습니다. 이를 위한 특별한 방법이 있습니다 — reverse();예:

암호 산출
String str = "Hello";
StringBuilder builder = new StringBuilder(str);
builder.reverse();
String result = builder.toString();
System.out.println(result);
olleH

" StringBuilder클래스 외에도 Java에는 이라는 또 다른 문자열과 유사한 클래스가 있습니다 StringBuffer. 클래스와 유사 StringBuilder하지만 해당 메서드는 수식어로 표시됩니다 synchronized."

"그게 무슨 뜻이야?"

StringBuffer" 개체가 여러 스레드에서 동시에 액세스될 수 있음을 의미합니다 ."

"저는 아직 스레드에 익숙하지 않습니다. 하지만 '여러 스레드에서 액세스할 수 있음'이 '여러 스레드에서 액세스할 수 없음'보다 분명히 낫습니다... 그럼 항상 사용하지 않는 이유는 무엇입니까? StringBuffer"

"보다 훨씬 느리기 때문입니다 . Java MultithreadingStringBuilder 퀘스트 에서 멀티스레딩을 적극적으로 탐색하기 시작할 때 이러한 클래스가 필요할 수 있습니다 .

"잊지 않도록 기억에 남길게요. '미래를 위해'라고 표시했습니다.