728x90

String 클래스는 문자열을 저장하기 위한 char[] 를 인스턴스 변수로 정의해 놓고 있다. String 클래스 인스턴스 생성시 대입되는 문자열은 해당 인수턴스 변수에 저장된다.

String 클래스는 불변 클래스이다. 한번 생성된 String 인스턴스는 문자열을 읽기만 가능하고 변경은 불가능하다.

 

문자열 결합

ex) + 연산시

+연산시 "abc"와 "def"를 합한 String 인스턴스를 새로 생성하여 해당 인스턴스를 가리킨다.

위처럼 +연산마다 새로운 String 인스턴스가 생성되어 메모리 공간을 차지하므로 결합횟수를 줄이는 것이 메모리 사용에 좋다.

 

문자열 비교

String 클래스 간의 비교는 equals 메소드로 가능하다.

String 인스턴스를 ==으로 비교할경우 해당 인스턴스들의 주소를 비교하게된다.

str1과 str2는 문자열 리터럴 "abc"를 가리킨다. 같은 주소를 가리키는 것이다.

str3과 str4는 각각 새로 생성된 String 인스턴스 "abc"를 가리킨다.

==의경우 문자열 주소 비교이기때문에 str1과 str2는 true이고 String 인스턴스를 생성한 str3과 str4는 false가 나온다.

equals의 경우 각각 문자열을 비교하기 때문에 모두 true이다.

 

String 클래스의 메소드

char charAt(int index) : 지정된 위치(index)에 있는 문자를 알려준다. index는 0부터 시작한다.

int compareTo(String str) : str과 사전순서로 비교한다. 같으면 0을 리턴하고, 사전순으로 이전이면 음수, 이후이면 양수를 리턴한다.

String concat(String str) : 문자열(str)을 뒤에 덧붙인다. 덧붙인 String을 리턴한다.

boolean contains(CharSequence s) : 지정된 문자열(s)이 포함되었는지 검사하고 포함되어있다면 true 아니라면 false를 리턴한다.

CharSequence는 CharBuffer, String, StringBuffer등의 조상 인터페이스로 자식 클래스중 어떤것이든 인자로 들어올 수 있다.

 

boolean endsWith(String suffix) : 지정된 문자열(suffix)로 끝나는지 검사한다. 파일명을 가져와서 endsWith suffix에 ".txt"를 넣어주면 해당 파일이 텍스트 파일인지 확인 가능하다.

boolean startWith(String suffix) : 지정된 문자열(suffix)로 시작하는지 검사한다.

boolean equals(Object obj) : 매개변수로 받은 문자열(obj)과 String 인스턴스의 문자열을 비교한다. obj가 String이 아니거나 문자열이 다르면 false를 리턴한다.

boolean equalsIgnoreCase(String str) : 문자열과 String인스턴스의 문자열을 대소문자 구분없이 비교한다.

 

int indexOf(int ch) : 문자(ch)가 문자열의 어느 위치에 있는지 확인하여 위치(index)를 반환해준다. 문자열에 존재하지 않는다면 -1을 반환한다.

int indexOf(int ch, int pos) : pos위치부터 문자(ch)가 위치를 알려준다.

int indexOf(String str) : 문자열(str)이 문자열의 어느위치에 있는지 확인하여 시작하는 위치(index)를 반환해준다. 문자열(str)이 문자열에 존재하지 않는다면 -1을 반환한다.

int lastIndexOf(int ch), int lastIndexOf(String str) : 위의 함수들과 같지만 문자열의 가장 오른쪽(맨끝) 부터 왼쪽으로 이동하면서 확인한다.

 

int length() : 문자열의 길이를 반환한다.

String replace(char old, char new) : 문자열중 문자(old)를 새로운 문자(new)로 바꾼 문자열을 반환한다.

String replace(CharSequence old, CharSequence new) : 문자열중 문자열(old)을 새로운 문자열(new)로 모두 바꾼 문자열을 반환한다.

String replaceAll(String regex, String replacement) : 문자열중 지정된 문자열(regex)과 일치하는 모든 문자열을 문자열(replacement)로 변경한다.

String replaceFirst(String regex, String replacement) : 문자열중 지정된 문자열(regex)과 일치하는 것 중, 첫번째로 일치하는 문자열만 문자열(replacement)로 변경한다.

 

String[] split(String regex) : 문자열을 지정된 분리자(regex)로 나누어 문자열 배열에 담아 반환한다.

String[] split(String regex, int limit) : 문자열을 지정된 분리자(regex)로 나누어 문자열배열에 담아 반환한다. 단, 문자열 전체를 지정된 수(limit)로 자른다.

String substring(int begin), String substring(int begin, int end) : 시작위치(begin)부터 끝 위치(end) 범위에 포함된 문자열을 얻는다. 이때, 시작위치의 문자는 범위에 포함되지만, 끝 위치의 문자는 포함되지 않는다.

 

String toLowerCase() : String인스턴스에 저장되어 있는 모든 문자열을 소문자로 변환하여 반환한다.

String toUpperCase() : String인스턴스에 저장되어 있는 모든 문자열을 대문자로 변환하여 반환한다.

String toString()  : String인스턴스에 저장되어 있는 문자열을 반환한다.

String trim() : 문자열의 왼쪽 끝과 오른쪽 끝에 있는 공백을 지운 결과를 반환한다. 문자열 중간에 있는 공백은 지워지지않는다.

 

join()메소드와 StringJoiner

String의 join()메소드를 통해 여러 문자열 사이에 구분자를 넣어서 결합할 수 있다.

StringJoiner클래스를 사용해서도 문자열 결합이 가능하다.

join()메소드와 StringJoiner클래스를 사용했을때이다.

join()메소드를 통해 해당 문자열배열 사이에 "-"를 넣어 결합한형태이고

StringJoiner클래스를 통해 구분자 "/", 시작문자 "[", 끝문자"]"를 결합한 상태이다.

StringJoiner에 add메소드를 통해 각 문자열들을 결합해준다.

 

기본형 값을 String으로 변환

일반적으로 숫자를 문자로 변환할 경우에는 숫자에 빈 문자열""을 더해주는 방식으로 숫자를 문자열로 변환한다.

숫자를 문자열로 변환하는 방법으로 String클래스의 valueOf()메소드가 있다. 성능은 valueOf()메소드가 더 좋기때문에 성능향상이 필요한경우가 아니라면 빈문자열을 더하는 방법이 더 편하다.

 

반대로 문자열을 기본형 값으로 변환하는 것도 valueOf()로 가능하다.

ex)

int i = Integer.valueOf("100");

int i2 = Integer.parseInt("100");

 

문자열의 데이터에 해당하는 데이터형 클래스의 메소드의 parse를 사용해서도 해당하는 데이터로 변환가능하다.

ex)

Byte.parseByte(String s);

Short.parseShort(String s);

Integer.parseInt(String s);

Long.parseLong(String s);

Float.parseFloat(String s);

Double.parseDouble(String s);

 

위의 클래스의 각각 valueOf(string str)을 사용해도 해당 문자열을 위의 클래스로 변환이 가능하다.

parseInt나 parseDouble같은 메소드는 문자열에 공백이 포함되어있는 경우 예외가 발생할 수 있으므로 주의해야한다.

그래서 trim()메소드를 통해 공백을 제거해주기도한다.

부호를 의미하는 '+'나 float형 값을 뜻하는 'f'와 같은 자료형 접미사는 포함 가능하다.

728x90

'Programming > JAVA' 카테고리의 다른 글

Collections Framework  (0) 2021.07.26
StringBuffer클래스와 StringBuilder클래스  (0) 2021.07.26
Object클래스 메서드  (0) 2021.07.18
예외처리 Exception handling  (0) 2021.07.17
Interface를 이용한 다형성  (0) 2021.07.17

+ Recent posts