참조 타입(reference type)
● 문자열을 관리하는 클래스
● 내부적으로는 char[ ]타입으로 각각의 문자들을 관리
● 불변성(Inmmutable)클래스
★String은 변하지 않는(immutable) 객체이기 때문에
문자열을 변수처럼 사용하고 싶다면 StringBuffer클래스를 사용해야 한다.
- String은 final 클래스로 상속불가능한 클래스
생성자 사용 및 리터럴 할당 방법으로 문자열 생성 가능
- 한 번 생성된 문자열은 불변이므로, 문자열을 수정하면
수정된 내용을 갖는 새로운 문자열을 생성해 다른 공간에 저장한다
따라서 문자열 수정이 빈번한 경우 StringBuilder나 StringBuffer클래스가 적합
- String클래스에 각종 메서드를 제공하므로 효율적인 문자열 처리가 가능하다
(1) 리터럴을 직접 할당하는 방법
-동일한 문자열 존재 여부를 Constant Pool(상수풀)에서 검색하여 존재하지 않으면 새로 생성,
존재할 경우 주소값 공유
- 그래서 동일한 문자열이 존재할 경우 저장 공간의 낭비가 없음
- 기존에 존재하지 않는 문자열이므로 상수 풀에 새 공간 할당받음
- s1이 가리키는 상수 풀과 동일한 위치의 주소값을 전달받음
※(자바는 문자열 리터럴이 동일하다면 String 객체를 공유하도록 되어있으므로
는 동일한 객체를 가리킨다)
(2) new연산자로 String 객체를 생성하여 할당하는 방법
- 동일한 문자열 존재여부와 관계없이 무조건 힙 공간에 문자열 생성
- 즉 s3, s4는 문자열 내용은 같지만 저장된 공간은 다르다
따라서 문자열의 내용만을 비교할 때에는 String 객체의 equals()메소드를 사용해야 함!!
- String 클래스에서 제공되는 다양한 메서드를 활용하여
문자열에 대한 검색, 분리, 추출, 변환, 비교등 여러 작업을 수행
- 인덱스의 범위는 0부터 문자열의 길이-1까지만 사용가능
- String클래스의 메서드들을 적용하더라도 원본 문자열에는 영향이 없다
length() :문자열 길이 리턴
equals() : 문자열 비교(대소문자 구별하여 비교)
equalsIgnoreCase() :문자열 비교(대소문자 구별없이 비교)
로그인할 때 아이디에 대하 문자열 비교 수행에 많이 이용
int indexOf(문자 또는 문자열)
파라미터로 전달된 문자 또는 문자열의 인덱스를 리턴한다
문자 또는 문자열을 앞쪽 0번 인덱스부터 탐색해서 값을 리턴한다
toUpperCase() :모든 영문 문자열을 대문자로 변환
toLowerCase() :모든 영문 문자열을 소문자로 변환
startWith(String):특정문자열로 시작되는지 여부를 판별
endsWith(String):특정문자열로 시작되는지 여부를 판별
trim( ) :문자열 앞 뒤 공백을 제거한다.
***문자열 사이(가운데) 공백은 유지된다
substring( ) : 부분 문자열 추출
substring(int beginIndex, int endIndex)
concat( ) :문자열 결합
연결연산자(+)를 사용한 결합보다 연산속도가 빠르다
문자열 결합 연산을 매우 많이 중첩될 경우 연결연산자보다 concat()연산자를 쓴다
split(String regex)문자열 분리
파라미터에 전달되는 구분자(분리자,Delimeter)를 기준으로 문자열을 분리하여 분리된
문자열을 String[]타입으로 리턴함
이때 사용되는 구분자(분리자)는 정규표현식을 기초로 하는 문자열 사용
문자열을 /을 기준으로 앞 뒤 문자열들을 분리
char charAt(int) : int형 인덱스에 해당하는 위치의 문자 1개 리턴
String jumin = "901010-5333333";
문자열 jumin 에 저장된 주민번호의 뒷자리 첫번째 숫자(char 타입 문자 1개)를 추출하여
'1' 또는 '3'일 때 "남성!" 출력하고, '2' 또는 '4'일 때 "여성!" 출력
jumin.charAt( ) 결과를 char 타입 변수에 저장하면 반복되는 추출을 줄일 수 있음
char genderNumber = jumin.charAt(7);
if(genderNumber == '1' || genderNumber == '3') {
System.out.println("남성!");
} else if(genderNumber == '2' || genderNumber == '4') {
System.out.println("여성!");
} else {
System.out.println("기타!");
}
}
replace(원본문자 또는 문자열, 바꿀 문자 또는 문자열): 문자또는 문자열로 치환
전화번호 가운데 숫자를 4자리 마스킹 처리를 어떻게 할까?
단, 전화번호 가운데 숫자는 3자리 또는 4자리이다
ㅣ읽느라 수고 많으셨어요~ㅣ
부족한 글을 읽어주셔서 감사드립니다
아직 부족한게 많으니
틀린 곳이 있다면
조언의 말씀 꼭 부탁드립니다!!!!
[자바] 배열 문제_array in java (0) | 2020.08.03 |
---|---|
[java] 자바_StringBuilder & StringBuffer클래스 쉽게 정리 /String과 차이점 비교/빌더패턴(Builder Pattern) (0) | 2020.08.02 |
[자바] java 클래스 메소드 정의/멤버 변수 초기화/객체(인스턴스) 생성/ 메소드 호출_실제예제보며 공부 (0) | 2020.07.29 |
[java]자바_StringTokenizer클래스를 통한 문자열 분리 /split차이점 (0) | 2020.07.28 |
[java]자바_제네릭(Generic)쉽게 정리/메서드/ 인터페이스/상속 /반복문/파라미터/Arraylist이해하기 (0) | 2020.07.27 |