String클래스

hyekyeong Song·2020년 3월 8일
0

String 클래스와 메소드들

1. Type : 참조 타입(reference type)

즉, String은 변하지 않는(immutable) 객체이기 때문에 문자열을 변수처럼 사용하고 싶다면 StringBuffer클래스를 사용해야 한다.
따라서 값을 바꾸는 경우 새로운 String 객체 인스턴스가 생성된다.

2. 두 가지의 문자열 생성 방식

문자열 생성 방식으로 String 과 new String() 두가지가 있다. 차이점을 비교해보며 객체와 메모리 영역에 대해 알아보쟝.

1) 문자열 리터럴 생성 방식

일반적으로 변수에 문자열을 저장할 경우 아래와 같이 문자열 리터럴을 사용하는 것 같다.

String str1 = "string class";

이럴 경우 String 객체는 Heap영역에 저장된다.

더 상세히 말하자면 문자열 리터럴은 String Constant Pool 영역에 할당이 되고, 자바7부터 문자열 상수 풀의 위치는 Heap으로 옮겨졌다.

그리고 자바는 문자열 리터럴이 동일하다면 String 객체를 공유하도록 되어있으므로

String str1 = "string class";
String str2 = "string class";

는 동일한 객체를 가리킨다.

그렇다면 당연히 주소값을 비교하는 참조변수의 ==, != 연산을 활용한다면

System.out.print(str1 == str2);	//true 출력

가 될것이다.

2) 문자열 리터럴 생성 방식

객체 생성 연산자인 new 연산자는 힙 영역에 새로운 객체를 만들 때 사용한다. 즉, new String()을 하는 경우 문자열의 내용이 동일하더라도 서로 다른 객체를 참조한다.

String str1 = "String class";
String str2 = new String("String class");
boolean result1 = (str1 == str2);	//false

가 된다.

따라서 문자열의 내용만을 비교할 때에는 String 객체의 equals()메소드를 사용해야 한다.

boolean result2 = str1.equals(str2);	//true

3. String클래스의 중요 메소드들

말해뭐해...뭘하든 API문서가 최고겠지만 자주 사용해서 편리하게 참고하고 싶은 몇몇 메소드들만 따로 정리하겠다. 아래 링크를 클릭하면 Java 8 API 문서를 볼 수 있다. 한국어 최고
Java 8 API 문서 링크

1) lengh() : 문자열 길이 리턴

return type : int

String str = "abc";
int strLen = str.lengh();	//3

2) equals() :문자열 내용 비교 결과 리턴

return type : boolean

String str1 = "String class";
String str2 = new String("String class");
boolean result2 = str1.equals(str2);	//true

3) charAt(int idx) : 해당 인덱스(idx) 문자를 리턴

return type : char

String str = "String class";
char ch = str.charAt(0);	//'S'

4) isEmpty() : 문자열 길이가 0이면 true를 리턴하고 아니면 false리턴

return type : boolean

String str = "a";
boolean isEmpty = str.isEmpty();	//false

5) indexOf(String str) : 문자열(str) 이 첫번째로 나타나는 인덱스를 리턴. 문자열(str)이 존재하지 않을 경우 -1을 리턴.

return type : int

String str = "abcdef";
int startIdx = str.indexOf("cd");	//2

이외에도 오버로딩된 indexOf 메소드들이 있으니 API참고

6) substring(int startIdx, int endIdx) : startIdx부터 (endIdx-1)까지의 문자열을 리턴. 두번째 파라미터 입력 안하면 문자열 마지막까지 리턴.

return type : string

_return type : String_
String resultStr = "abcd".subString(1, 3);	//"bc"

7) replaceAll(String regex, String replacement) : regex에 해당하는 문자열을 모두 replacement 문자열로 변경한 문자열을 리턴.

return type : string

String str1 = "apple and apple";
String str2 = str1.replaceAll("apple", "banana");	//"banana and banana"

8) toUpperCase() : 문자열을 전부 대문자로 교체

return type : string

String str = "AbCd";
String upperStr = str.toUpperCase();	//"ABCD"

9) toLowerCase() : 문자열을 전부 소문자로 교체

return type : string

String str = "AbCd";
String lowerStr = str.toLowerCase();	//"abcd"

10) trim() : 중간 제외 문자열 앞, 뒤의 공백을 제거한 문자열 리턴

return type : string

11) valueOf(Object obj) : 객체 내용을 문자열로 리턴한다. Object가 null인경우 "null"이라는 문자열을 리턴한다.

return type : string

int num = 100;
String str = null;
String numStr = String.valueOf(num);	//"100"
String nullStr = String.valueOf(str);	//"null"

Object 클래스의 toString()메소드와 비교
toString() 또한 객체의 내용을 문자열로 리턴하나 대상값이 null이면 NullPointerException을 발생시킨다.

12) toCharArray() : 문자열을 char타입의 배열로 리턴한다

return type : char[]

String str = "apple and banana";
char[] array = str.toCharArray();	//[a, p, p, l, e, , a, n, d, , b, a, n, a, n, a]

13) split(String regex) : regex기준으로 문자열을 분리해 String 배열로 리턴

return type : String[]

String str = "apple,and,apple";
String[] arr = str.split(",");
System.out.println(Arrays.toString(arr));	//[apple, and, apple]
profile
안녕하세요😀😀

0개의 댓글