본문 바로가기

Java

[Java] String 클래스 정리

반응형

String 클래스 정리

자바의 신을 읽으면서 나온 String 클래스의 메소드를 정리했다. 더 많은 메소드들과 자세한 설명이 있지만 많이 사용할 것 같은 메소드들 위주로 정리했다.

  • 문자열의 길이를 확인하는 메소드
  • 문자열이 비어 있는지 확인하는 메소드
  • 문자열이 같은지 비교하는 메소드
  • 특정 조건에 맞는 문자열이 있는지를 확인하는 메소드
  • String내에서 위치를 찾아내는 메소드
  • String에서 일부를 추출하는(잘라주는) 메소드
  • String 공백을 없애는 메소드
  • String 내용을 교체하는 메소드
  • 대소문자를 바꾸는 메소드
  • 기본 자료형을 문자열로 변환하는 메소드
  • StringBuffer와 StringBuilder

문자열의 길이를 확인하는 메소드

리턴 타입 메소드 이름 및 매개 변수 설명
int length() 문자열의 길이를 리턴한다.

문자열이 비어 있는지 확인하는 메소드

리턴 타입 메소드 이름 및 매개 변수 설명
boolean isEmpty() 문자열이 비어 있는지를 확인. 비어 있으면 true를 리턴한다.

문자열이 같은지 비교하는 메소드

리턴 타입 메소드 이름 및 매개 변수
boolean equals(Object anObject)
boolean equalsIgnoreCase(String anotherStr)
int compareTo(String anotherStr)
int compareToIgnoreCase(String str)
boolean contentEquals(CharSequence cs)
boolean contentEquals(StringBuilder sb)

String 클래스에서 제공하는 문자열이 같은지를 비교하는 메소드들은 다양하다. IgnoreCase가 붙은 메소드들은 대소문자 구분을 하지 않고 비교한다.

  • equals는 문자열이 같은지를 true, false로 리턴해준다.
  • compareTo는 알파벳 순으로 앞에 있으면 양수, 뒤에 있으면 음수를 리턴하고 알파벳 순서만큼 그 숫자값이 커진다.
  • contentEquals는 CharSequence와 StringBuilder 객체의 내용을 비교한다.

보통 equals()와 "=="의 차이를 잘 모르기 때문에 "=="을 많이 사용하는데 정확한 비교를 위해서는 equals()를 사용해야한다. 이유는 다음 예시를 보면 이해할 수 있다.

String text = "Check";
String text2 = "Check";
String text3 = new String("Check");
System.out.println(text==text2);
System.out.println(text==text3);
System.out.println(text.equals(text3));

위 코드의 결과를 출력해보면 다음과 같다.

true
false
true

모두 "Check"라는 문자열이지만 text==text3이 false라는 결과가 나온다. 그 이유는 바로 자바에 Constant Pool이 존재하기 때문이다. 자바에서는 객체들을 재사용하기 위해서 Constant Pool이라는 것이 만들어져 있고, String의 경우 동일한 값을 갖는 객체가 있으면, 이미 만든 객체를 재사용한다. 그래서 text와 text2는 같은 객체이고 text3는 새로 생성을 했기 때문에 다르다고 인식하는 것이다.
"==" 연산은 객체가 같은지를 확인하는 연산이고, equals()는 문자열의 내용이 같은지를 확인하는 메소드인 것이다.

특정 조건에 맞는 문자열이 있는지를 확인하는 메소드

리턴 타입 메소드 이름 및 매개 변수 설명
boolean startsWith(String prefix) 매개 변수로 넘겨준 값으로 시작하는지를 확인한다.
boolean endsWith(String suffix) 매개 변수로 넘어온 값으로 해당 문자열이 끝나는지를 확인한다.
boolean contains(CharSequence s) 매개 변수로 넘어온 값이 문자열에 존재하는지를 확인한다.
boolean matches(String regex) 매개 변수로 넘어온 "정규 표현식"이 문자열에 존재하는지를 확인한다.

String내에서 위치를 찾아내는 메소드

리턴 타입 메소드 이름 및 매개 변수
int indexOf(int ch)
int indexOf(String str)

앞에서부터(가장 왼쪽부터) 문자열이나 char을 찾는다.

String에서 일부를 추출하는(잘라주는) 메소드

리턴 타입 메소드 이름 및 매개 변수 설명
char charAt(int index) 특정 위치의 char 값을 리턴한다.
static String copyValueOf(char[] data) char 배열에 있는 값을 문자열로 반환한다.
char[] toCharArray() 문자열을 char 배열로 반환하는 메소드
String substring(int beginIndex) beginIndex부터 끝까지 대상 문자열을 잘라 String으로 리턴한다.
String substring(int beginIndex, int endIndex) beginIndex부터 endIndex까지 대상 문자열을 잘라 String으로 리턴한다.
String[] split(String regex) regwx에 있는 정규 표현식에 맞추어 문자열을 잘라 String의 배열로 리턴한다.

String 공백을 없애는 메소드

리턴 타입 메소드 이름 및 매개 변수 설명
String trim() 문자열의 맨 앞과 맨 뒤에 있는 공백들을 제거한 문자열 객체를 리턴한다.
``` java    
it(text != null && text.trim().length() > 0)    
```    
위에 조건식을 사용하면 공백만으로 이루어진 문자열인지를 확인할 수 있다.    

String 내용을 교체하는 메소드

리턴 타입 메소드 이름 및 매개 변수 설명
String replace(char oldChar, char newChar) 해당 문자열에 있는 oldChar을 newChar로 교체한다.
String replace(CharSequence target, CharSequence replacement) 해당 문자열에 있는 target과 같은 값을 replacement로 교체한다.
String replace(String regex, String replacement) 해당 문자열의 내용 중 regex에 표현된 정규 표현식에 포함되는 모든 내용을 replacement로 교체한다.
String replaceFirst(String regex, String replacement) 해당 문자열의 내용 중 regex에 표현된 정규 표현식에 포함되는 첫번째 내용을 replacement로 교체한다.

대소문자를 바꾸는 메소드

리턴 타입 메소드 이름 및 매개 변수 설명
String toLowerCase() 모든 문자열의 내용을 소문자로 변경한다.
String toUpperCase() 모든 문자열의 내용을 대문자로 변경한다.

기본 자료형을 문자열로 변환하는 메소드

리턴 타입 메소드 이름 및 매개 변수 설명
static String valueOf() 기본 자료형들을 문자열로 변환 시켜준다.

StringBuffer와 StringBuilder

String은 immutable(불변)한 객체이다. String은 한 번 만들어 지면 더 이상 그 값을 바꿀 수가 없다. 그래서 + 연산을 할 때 String 객체가 변하는 것이 아니고, 새로운 String 객체가 생성되고 기존 객체는 버려지게 된다. 결과적으로 String 객체를 더하는 작업을 계속하면 할 수록 계속해서 쓰레기가 만들어지는 것이다. 이러한 점을 보완하기 위해서 나온 클래스가 StringBuffer와 StringBuilder이다.

두 클래스에서 제공하는 메소드는 동일하지만, StringBuffer는 Thread safe 하고, StringBuilder는 Thread safe 하지 않고 더 빠르다.

이 두 클래스는 append() 메소드를 이용해서 계속해서 더하기 연산을 할 수 있다.

StringBuilder sb = new StringBuilder();
sb.append("Hello");
sb.append(" World);
StringBuilder sb = new StringBuilder();
sb.append("Hello").append(" World");

추가로 JDK 5 이상에서는 String 더하기 연산을 할 경우, 컴파일 할 때 자동으로 StringBuilder로 변환해주기 때문에 일일이 더하는 작업을 변환해 줄 필요는 없지만, for 루프와 같이 반복 연산을 할 때에는 자동으로 변환을 해주지 않으므로, 꼭 필요하다.

참고자료

자바의 神1 2nd Edition / 이상민 지음

반응형

'Java' 카테고리의 다른 글

[Java] 자바 컬렉션 Map  (0) 2022.01.11
[Java] 자바 컬렉션 Set  (0) 2022.01.11
[Java] 상속이란?  (0) 2022.01.06
[Java] 변수와 자료형  (0) 2022.01.04
[Java] 자바 ArrayList 정리  (0) 2021.09.16