
1) String 클래스
- 문자열 데이터를 처리하는 클래스
- 리터럴을 사용하여 문자열을 직접 생성하거나 new 연산자를 사용한 인스턴스 생성 시 생성자에 문자열을 전달하여 생성
- 리터럴 사용 : 해당 문자열 존재 여부를 상수 풀에서 검산 후 중복되는 문자열이 없으면 생성, 중복될 경우 주소값 리턴하므로 메모리 공간 낭비가 줄어들게 됨
- new 연산자 사용 : 문자열 중복 여부와 무관하게 문자열 객체 생성
- 문자열 내용 비교 시 동등비교(==) 보다 equals() 메서드 사용
- 문자열 생성하면 String 클래스 내부적으로 char[]로 관리됨
- 개별자의 편의를 위해 별도의 String 클래스를 만들어서 제공
- 배열 형태이므로 배열 인덱스와 동일한 인덱스 번호 사용
⚠️ 첫 글자 인덱스 0번, 마지막 글자 인덱스는 문자열 길이 -1
2) String 클래스의 메서드
- 문자열 수정, 검색, 치환 등 다양한 작업을 수행하는 메서드를 제공
- String 객체는 불변 객체이므로 원본 문자열을 수정하지 않고 각종 작업을 수행할 경우 수정된 데이터를 문자열로 새로 생성함
➡️ StringBuilder 또는 StringBuffer 클래스를 활용해야함
- length() : 문자열의 길이 리턴

- equals() : 문자열의 내용값 비교(대소문자까지 비교)

- equalsIgnoreCase() : 문자열의 내용값 비교(대소문자 비교X)

- charAt(n) : n번째 인덱스에 위치한 문자 1개 리턴

- substring(n) : n번 인덱스 문자부터 끝까지 추출
- substring(n, m) : n번 인덱스 문자부터 (m-1)번 인덱스까지 추출

- concat() : 문자열 결합, 리터럴 문자나 리터럴 문자열, 값이 저장된 변수 모두 입력 가능(일반 결합 연산자 '+' 보다 연산속도가 빠름)

- indexOf() : 특정문자 또는 문자열의 인덱스 리턴 ➡️ 문자열 앞쪽(첫번째 인덱스)부터 탐색, 탐색할 내용이 존재하지 않으면 -1 리턴
- lastIndexOf() : 문자열 탐색 시 뒤에서부터 탐색 ➡️ 탐색은 뒤에서 하지만 인덱스번호 자체는 앞에서부터 시작
(⚠️ 뒤에서 2번째 있다고 해서 인덱스가 1은 아님!!)

- replace(a1, a2) : 특정문자 또는 문자열(a1)을 a2로 치환 ➡️ 동일한 문자 또는 문자열이 존재할 경우 모두 치환

- toUpperCase() / toLowerCase() : 알파벳의 대소문자 변환
- trim() : 문자열 앞 뒤의 불필요한 공백 제거
⚠️ 문자열 사이의 공백은 제거 X
- contains() : 문자열 포함 여부 리턴(true, false로 리턴)

- split() : 특정 기준으로 문자열 분리되며, 분리된 문자열은 배열로 관리된다.
➡️ 분리에 사용되는 기준 문자열을 구분자(=분리자, Delimeter) 라고 하며, 구분자 지정 규칙은 정규포현식을 따름 
⚠️ 온점(.) 기호를 구분자로 지정하는 경우 ➡️ 정규표현식에 따라 모든 문자를 구분자로 지정. \. 형태를 사용하여 구분

- String.format() : 특정 문자열을 형식 지정문자와 결합하여 형식을 갖춘 문자열로 리턴 ➡️ printf와 쓰는 방식이 똑같음

- toCharArray() : 문자열을 분리하여 char 타입 배열로 저장하여 리턴
- Arrays.toString() : 배열의 내용을 문자열로 리턴

3) StringBuffer & StringBuilder
- String 클래스는 한 번 생성되면 그 내부의 문자열이 변경되지 않음 ➡️ 계속 연결 또는 변경하면 메모리 낭비가 심함
➡️ 이 때, StringBuffer 와 StringBuilder 를 활용하면 문자열 변경하거나 연결 가능 / 두 클래스는 크게 차이 없음
- StringBuffer : 스레드가 동작하는 멀티쓰레드 프로그램 ➡️ 문자열의 안전한 변경 보장
- StringBuilder : 스레드가 동작하지 않는 프로그램 ➡️ 실행 속도가 좀 더 빠름
![업로드중..]()