💡 핵심 요약 (TL;DR)
java.lang패키지3 : String 클래스, StringBuffer와 StringBuilder 클래스의 메서드의 동작 원리를 이해하고 실제 프로젝트에 적용하기 위한 실무 가이드다.
3. 생성자를 사용하지 않고 바로 “”로 둘러싼 문자열을 할당가능. -> String Pool사용.
String 클래스의 특징과 객체 생성
가장 많이 사용되는 클래스 1위!
기본특징
final 클래스 -> 상속을 받아서 수정불가
내부적으로 char[]배열을 만들어서 데이터를 저장함.
생성자를 사용하지 않고 바로 “”로 둘러싼 문자열을 할당가능. -> String Pool사용.
불변성(Immutable)클래스 : 무심코 +로 연결한 문자열이 메모리를 심각하게 낭비할 수 있음.
이 불변성때문에 equals()와 ==연산자차이가 생긴다.
객체생성방법 2가지
new 키워드 : heap메모리공간에 새로운 문자열을 저장
“”문자열할당 : 상수저장공간(Constant Pool)에 새로운 문자열을 저장.
중복된 값 무시.
메모리절약에 유리(아래 이미지 참조).
참고링크 : equals()와 ==연산자차이점, String Pool
String 주요 메서드
선언부
설명
public int length()
주어진 문자열의 길이를 리턴
public char charAt(int index)
index에 해당하는 문자를 리턴. 없는경우 IndexOutOfBoundsException
public int indexOf(int ch)
문자열내에서 ch의 index를 리턴. 없을경우 -1
public boolean equals(Object o)
o의 문자열의 내용을 비교해서 결과를 boolean타입으로 리턴
public boolean equalsIgnoreCase(String s)
대소문자 구별없이 s의 문자열의 내용이 같은지 boolean타입으로 리턴
public String replace(char oldChar, char newChar)
문자열에서 oldChar를 찾아서 newChar로 변경된 새로운 문자열을 리턴
public String substring(int beginIdx, int endIdx)
문자열의 beginIdx에서 endIdx앞까지 잘라서 리턴
public String trim()
문자열 좌우 공백을 없앤 결과를 리턴
public boolean matches(String regex)
문자열이 정규표현식 regex에 부합되는지 여부를 boolean타입으로 리턴
public String[] split(String regex)
문자열을 주어진 정규표현식으로 나눈 후 배열에 담아서 리턴
charAt() 예시 1 2 3 4 5 6 7 8 9 10 11 12 13 14 String ssn = "000101-4111111" ;char gender = ssn.charAt(7 );if (gender == '4' ){ System.out.println("여" ); }else if (gender == '3' ){ System.out.println("남" ); }else { System.out.println("주민번호형식오류" ); } System.out.println(gender); 여 4
equalsIgnoreCase()예시 1 2 3 4 5 6 String s = "HI" ;System.out.println("hi" .equals(s)); System.out.println("hi" .equalsIgnoreCase(s)); false true
replace() 예시
1 2 3 4 5 6 7 String hp = "010-1234-5678" ;String last4 = hp.substring(9 , hp.length());System.out.println("추출된 문자열 : " +last4); System.out.println("마킹된 폰번 : " +hp.replace(last4, "****" )); 추출된 문자열 : 5678 마킹 폰번 : 010 -1234 -****
1 2 3 System.out.println("하이픈제거 폰번호 :" +hp.replace("-" , "" )); 하이픈제거 폰번호 :01012345678
split()과 matches() 예시
1 2 3 4 5 6 7 String str = "Hi java world" ;String [] result = str.split(" " );for (String s : result){ System.out.println(s); }Hi java world
1 2 3 4 5 6 7 8 9 10 11 public static void main (String[] args) { String str = "Hi java world" ; String [] sResult = str.split("[a ]" ); for (int i = 0 ; i<sResult.length;i++){ System.out.println(i+" : " +sResult[i]); } String nameRule = "[a-zA-Z가-힣]{2,5}" ; System.out.println(str.matches(nameRule)); System.out.println("Hi" .matches(nameRule)); System.out.println("Hijavaworld2" .matches(nameRule)); }
StringBuffer와 StringBuilder 클래스의 메서드
String클래스는 불변성 클래스이기때문에 문자열 연산에 제약이 많음
1 2 3 4 5 6 7 8 9 10 sql = "abc" ; sql.toUpperCase (); sql; str = sql.toUpperCase (); str sql
* 따라서 문자열 연산에 적합한 StringBuffer와 StringBuilder 클래스 사용가능.
Buffer(버퍼) : 배열형태. 데이터를 임시로 저장하는 공간.
StringBuffer와 String의 차이점
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 sql = "abc" ; sql.toUpperCase (); sql; str = sql.toUpperCase (); str sql sql2 = "abc" ; sql2.substring (1 ); sql2 = "bc"
따라서 문자열 연산에 적합한 StringBuffer와 StringBuilder 클래스 사용가능.
주요 메서드
여기서 P는 Object, String, StringBuffer, charSequence, Char[], Boolean, char, int, long, float, double이 올 수 있다.
선언부
설명
public StringBuilder append(P param)
현재 버퍼의 맨 뒤에 param을 추가한 후 StringBuilder타입으로 리턴
public String toString()
버터의 내용을 문자열로 리턴
append()와 toString()예시 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 StringBuilder b = new StringBuilder ("서면-대연-광안-수영" );b.append("-장산" ); System.out.println(b); b.insert(0 , "부암-" ); System.out.println(b); b.delete(5 , 8 ); System.out.println(b); b.replace(0 , 1 , "푸" ); System.out.println(b); 서면-대연-광안-수영-장산 부암-서면-대연-광안-수영-장산 부암-서면-광안-수영-장산 푸암-서면-광안-수영-장산
#TIL ITWILL(JAVA)