Java Strings 클래스: 문자열 생성 및 조작 마스터하기
Java 프로그래밍에서 널리 사용되는 문자열은 문자 시퀀스입니다. Java 프로그래밍 언어에서 문자열은 객체로 취급됩니다.
Java 플랫폼은 문자열 생성과 조작을 위한 String 클래스를 제공합니다.
문자열 생성
문자열을 생성하는 가장 직접적인 방법은 다음과 같이 쓰는 것입니다:
String greeting = "Hello world!";
코드에서 문자열 리터럴을 만날 때마다 컴파일러는 이 경우 "Hello world!"라는 값으로 String 객체를 생성합니다.
다른 객체처럼 new 키워드와 생성자를 사용하여 String 객체를 생성할 수도 있습니다. String 클래스에는 문자 배열 등 다양한 소스를 사용하여 문자열의 초기값을 제공할 수 있는 11개의 생성자가 있습니다.
예제
Live Demo
public class StringDemo {
public static void main(String args[]) {
char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' };
String helloString = new String(helloArray);
System.out.println( helloString );
}
}
이 코드는 다음 결과를 생성합니다:
출력
hello.
참고 - String 클래스는 불변(immutable)이므로 한 번 생성되면 String 객체를 변경할 수 없습니다. 문자열 문자에 많은 수정이 필요하다면 StringBuffer와 StringBuilder 클래스를 사용해야 합니다.
문자열 길이
객체에 대한 정보를 얻기 위해 사용되는 메서드를 접근자 메서드라고 합니다. 문자열과 함께 사용할 수 있는 접근자 메서드 중 하나는 length() 메서드로, 문자열 객체에 포함된 문자 수를 반환합니다.
다음 프로그램은 String 클래스의 length() 메서드 예제입니다.
예제
Live Demo
public class StringDemo {
public static void main(String args[]) {
String palindrome = "Dot saw I was Tod";
int len = palindrome.length();
System.out.println( "String Length is : " + len );
}
}
이 코드는 다음 결과를 생성합니다:
출력
String Length is : 17
문자열 연결
String 클래스에는 두 문자열을 연결하는 메서드가 포함되어 있습니다:
string1.concat(string2);
이는 string1에 string2가 끝에 추가된 새로운 문자열을 반환합니다. 문자열 리터럴과 함께 concat() 메서드를 사용할 수도 있습니다:
"My name is ".concat("Zara");
문자열은 더 일반적으로 + 연산자로 연결됩니다:
"Hello," + " world" + "!"
이는 다음 결과를 만듭니다:
"Hello, world!"
다음 예제를 살펴보겠습니다:
예제
Live Demo
public class StringDemo {
public static void main(String args[]) {
String string1 = "saw I was ";
System.out.println("Dot " + string1 + "Tod");
}
}
이 코드는 다음 결과를 생성합니다:
출력
Dot saw I was Tod
포맷 문자열 생성
printf()와 format() 메서드로 포맷된 숫자 출력이 가능합니다. String 클래스에는 동등한 클래스 메서드 format()이 있어 PrintStream 객체 대신 String 객체를 반환합니다.
String의 정적 format() 메서드를 사용하면 일회성 출력문 대신 재사용 가능한 포맷 문자열을 생성할 수 있습니다. 예를 들어:
예제
System.out.printf("The value of the float variable is " + "%f, while the value of the integer " + "variable is %d, and the string " + "is %s", floatVar, intVar, stringVar);
다음과 같이 작성할 수 있습니다:
String fs;
fs = String.format("The value of the float variable is " + "%f, while the value of the integer " + "variable is %d, and the string " + "is %s", floatVar, intVar, stringVar);
System.out.println(fs);
String 메서드
String 클래스에서 지원하는 메서드 목록입니다:
| 번호 |
메서드 & 설명 |
| 1 | char charAt(int index) - 지정된 인덱스의 문자 반환 |
| 2 | int compareTo(Object o) - 이 String을 다른 Object와 비교 |
| 3 | int compareTo(String anotherString) - 두 문자열을 사전순으로 비교 |
| 4 | int compareToIgnoreCase(String str) - 대소문자 무시하고 두 문자열 사전순 비교 |
| 5 | String concat(String str) - 지정된 문자열을 이 문자열 끝에 연결 |
| 6 | boolean contentEquals(StringBuffer sb) - 이 String이 지정된 StringBuffer와 같은 문자 시퀀스를 나타내면 true |
| 7 | static String copyValueOf(char[] data) - 지정된 배열의 문자 시퀀스를 나타내는 String 반환 |
| 8 | static String copyValueOf(char[] data, int offset, int count) - 배열의 지정된 부분 문자 시퀀스 반환 |
| 9 | boolean endsWith(String suffix) - 이 문자열이 지정된 접미사로 끝나는지 테스트 |
| 10 | boolean equals(Object anObject) - 이 문자열을 지정된 객체와 비교 |
| 11 | boolean equalsIgnoreCase(String anotherString) - 대소문자 무시하고 이 String을 다른 String과 비교 |
| 12 | byte[] getBytes() - 플랫폼 기본 문자셋으로 이 String을 바이트 시퀀스로 인코딩 |
| 13 | byte[] getBytes(String charsetName) - 명명된 문자셋으로 이 String을 바이트 시퀀스로 인코딩 |
| 14 | void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) - 이 문자열의 문자들을 대상 문자 배열로 복사 |
| 15 | int hashCode() - 이 문자열의 해시 코드 반환 |
| 16 | int indexOf(int ch) - 이 문자열에서 지정된 문자의 첫 출현 인덱스 반환 |
| 17 | int indexOf(int ch, int fromIndex) - 지정된 인덱스부터 검색하여 첫 출현 인덱스 반환 |
| 18 | int indexOf(String str) - 지정된 부분문자열의 첫 출현 인덱스 반환 |
| 19 | int indexOf(String str, int fromIndex) - 지정된 인덱스부터 부분문자열 첫 출현 검색 |
| 20 | String intern() - 문자열 객체의 표준 표현 반환 |
| 21 | int lastIndexOf(int ch) - 지정된 문자의 마지막 출현 인덱스 반환 |
| 22 | int lastIndexOf(int ch, int fromIndex) - 지정된 인덱스부터 역방향 검색으로 마지막 출현 |
| 23 | int lastIndexOf(String str) - 지정된 부분문자열의 가장 오른쪽 출현 인덱스 |
| 24 | int lastIndexOf(String str, int fromIndex) - 지정된 인덱스부터 역방향으로 부분문자열 마지막 출현 |
| 25 | int length() - 이 문자열의 길이 반환 |
| 26 | boolean matches(String regex) - 이 문자열이 주어진 정규식과 매치되는지 여부 |
| 27 | boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len) - 두 문자열 영역이 같은지 테스트 |
| 28 | boolean regionMatches(int toffset, String other, int ooffset, int len) - 두 문자열 영역이 같은지 테스트 |
| 29 | String replace(char oldChar, char newChar) - oldChar의 모든 출현을 newChar로 바꾼 새 문자열 반환 |
| 30 | String replaceAll(String regex, String replacement) - 주어진 정규식과 매치되는 각 부분문자열을 주어진 대체문자열로 교체 |
| 31 | String replaceFirst(String regex, String replacement) - 주어진 정규식과 매치되는 첫 번째 부분문자열을 교체 |
| 32 | String[] split(String regex) - 주어진 정규식 매치를 기준으로 이 문자열 분할 |
| 33 | String[] split(String regex, int limit) - 주어진 정규식 매치를 기준으로 분할(제한) |
| 34 | boolean startsWith(String prefix) - 이 문자열이 지정된 접두사로 시작하는지 테스트 |
| 35 | boolean startsWith(String prefix, int toffset) - 지정된 인덱스부터 접두사로 시작하는지 테스트 |
| 36 | CharSequence subSequence(int beginIndex, int endIndex) - 이 시퀀스의 부분시퀀스인 새 문자 시퀀스 반환 |
| 37 | String substring(int beginIndex) - 이 문자열의 부분문자열인 새 문자열 반환 |
| 38 | String substring(int beginIndex, int endIndex) - 이 문자열의 부분문자열인 새 문자열 반환 |
| 39 | char[] toCharArray() - 이 문자열을 새 문자 배열로 변환 |
| 40 | String toLowerCase() - 기본 로케일 규칙으로 모든 문자를 소문자로 변환 |
| 41 | String toLowerCase(Locale locale) - 주어진 Locale 규칙으로 모든 문자를 소문자로 변환 |
| 42 | String toString() - 이 객체(이미 문자열!) 자신을 반환 |
| 43 | String toUpperCase() - 기본 로케일 규칙으로 모든 문자를 대문자로 변환 |
| 44 | String toUpperCase(Locale locale) - 주어진 Locale 규칙으로 모든 문자를 대문자로 변환 |
| 45 | String trim() - 앞뒤 공백을 제거한 문자열 복사본 반환 |
| 46 | static String valueOf(primitive data type x) - 전달된 데이터 타입 인자의 문자열 표현 반환 |