Java String 클래스
개요
String 클래스는 문자열을 생성하고 조작할 수 있도록 다양한 생성자와 메소드를 가지고 있다.
(C언어와 비교해서는 메모리 관련 연산자를 사용하지 않기 때문에 문자열의 생성 및 조작이 편하다.)
String 생성자
| 생성자 | 설명 |
|---|---|
| String() | 디폴트 생성자. 문자열이 없는 객체를 생성한다. |
| String(String original) | 다른 String 객체를 이용하여 문자열 생성한다. |
| String(char value[]) | 문자 배열을 이용한 객체 생성한다. |
| String(char value[], int offset, int count) | 문자 배열의 내용 중 첫 번째 인덱스부터 두번째 인덱스의 수 만큼의 내용을 객체로 생성한다. |
| String(int[] codePoints, int offset, int count) | (J2SE5) 유니코드 포인트를 포함하는 배열을 이용하여 객체 생성한다. |
| String(byte bytes[]) | 바이트 배열을 이용해서 객체 생성한다. |
| String(byte bytes[], String charsetName) | 바이트 배열의 내용을 지정된 Charset명을 이용하여 객체로 생성한다. |
| String(byte bytes[], Charset charset) | 바이트 배열의 내용을 지정된 Charset을 이용하여 객체로 생성한다. |
| String(StringBuffer buffer) | StringBuffer 객체를 이용해서 객체 생성 |
| String(StringBuilder builder) | (J2SE5) StringBuilder 객체를 이용해서 객체 생성한다. |
문자열 생성 - 생성자를 사용하지 않는다.
자바에서는 String 객체는 다른 객체와 다르게 생성자를 이용하지 않고도 문자열 객체를 생성할 수 있다.
다음은 new 사용하지 않고 리터럴을 사용하여 문자열을 생성하는 예제이다.
package com.devkuma.tutorial.string;
public class StringJava {
public static void main(String[] args) {
String str = "This is java.";
System.out.println(str);
}
}
결과는 아래와 같다.
This is java.
자바의 클래스 중에 유일하게 String 클래스만 이런 특수성을 띠고 있다. String 클래스가 이런다고 해서 다른 클래스도 이럴 수 있다는 생각은 버려야 한다. 이와 비슷한 클래스도 없고 만들 수도 없다.
문자열 생성 - 왜 생성자를 사용하지 않는가?
위에서 String 객체는 생성을 할 시에 따로 new를 사용하지 않고도 리터럴 대입만으로 생성이 된다고 했다. 물론 new를 사용하여 리터럴을 파라미터로 넣어서도 가능하다. 하지만 일반적으로 리터럴을 사용한 문자열은 new로 생성하지 않는다. 왜 그런 것인가? 코드를 줄이는 것이 좋아서도 있지만 내부적으로도 다른 이유가 있다.
아래 예제는 new 사용하여 리터럴을 대입하여 문자열 객체를 생성하였다.
package com.devkuma.tutorial.string;
public class StringJava2 {
public static void main(String[] args) {
String str = new String("This is java.");
System.out.println(str);
}
}
먼저 제시한 예제와 동일하게 다음과 결과는 같다.
This is java.
결과는 같아도 내부적으로 메모리 주소는 2개가 생길 수 있다. 먼저 “This is Java.“로 생기고 new String(“This is java”)로 생길 수 있다는 것이다. 한 번의 동작만으로 객체를 생성할 수 있는데 굳이 2번의 작업을 하여 2개의 메모리 주소를 만들 필요는 없는 것이다. 물론 가비지 컬렉터에서 메모리적으로 처리를 해주긴 하겠지만, 이것도 미세한 성능 관련이기에 될 수 있으면 피하도록 하자.
문자열 결합 - 메소드를 사용하지 않는다.
String 객체는 메소드를 사용하지 않아도 문자열 연산자인 “+” 연산자를 이용하여 결합시킬 수 있다.
package com.devkuma.tutorial.string;
public class StringConcat2 {
public static void main(String[] args) {
String age = "30";
System.out.println("He is " + age + " years old");
}
}
문자열이 아닌 다른 데이터 타입과도 결합이 가능하다.
package com.devkuma.tutorial.string;
public class StringConcat3 {
public static void main(String[] args) {
int age = 30;
System.out.println("He is " + age + " years old");
}
}
기존의 문자열이 변경될 때마다 변경된 문자열의 새로운 String 객체가 생성된다. 원래의 문자열은 변경되지 않은 채로 그대로 남아 있다. 이는 가비지콜렉터에 의해서 관리될 것이다.
String 주요 메소드
| 메소드 | 설명 |
|---|---|
문자열 길이
문자열 길이는 문자열에 포함되어 있는 문자들의 수를 말한다. 문자열의 길이는 length() 메소드를 이용하여 알아낼 수 있다.
준비중...
문자열에서 문자열 추출
- char charAt(int index)
- void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin)
문자열 비교
- boolean equals(Object anObject)
- boolean startsWith(String prefix, int toffset)
- boolean startsWith(String prefix)
- boolean endsWith(String suffix)
- int compareTo(String anotherString)
문자열 검색
문자열에 포함된 서브 문자열을 검색하기 위해서 사용한다.
- int indexOf(int ch)
- int indexOf(int ch, int fromIndex)
- int lastIndexOf(int ch)
- int lastIndexOf(int ch, int fromIndex)
- int indexOf(String str)
- int indexOf(String str, int fromIndex)
- int lastIndexOf(String str)
- int lastIndexOf(String str, int fromIndex)
문자열 변환
- String substring(int beginIndex)
- String substring(int beginIndex, int endIndex)
- String concat(String str)
- String replace(char oldChar, char newChar)
- String replaceAll(String regex, String replacement)
- String replace(CharSequence target, CharSequence replacement)
- String trim()
- String toLowerCase()
- String toUpperCase()
형변환
- String valueOf(Object obj)
- String valueOf(char data[])
- String valueOf(char data[], int offset, int count)
- String valueOf(boolean b)
- String valueOf(char c)
- String valueOf(int i)
- String valueOf(long l)
- String valueOf(float f)
- String valueOf(double d)