본문 바로가기

자바/자바 개념

[Java] String 클래스 / 2021.11.21

* 참고 자료 : 명품 자바 프로그래밍

 

1. String의 특징과 객체 생성

String 클래스는 java.lang 패키지에 포함된 클래스로 문자열을 나타낸다. String 클래스는 다양한 생성자를 통해 여러 가지 방법으로 String 객체를 생성할 수 있게 한다.

 

생성자 설명
String() 빈 스트링 객체 생성
String(char[] value) char 배열에 있는 문자들을 스트링 객체로 생성
String(String original) 매개변수로 주어진 문자열과 동일한 스트링 객체 생성
String(StringBuffer buffer) 매개변수로 주어진 스트링 버퍼의 문자열을 스트링 객체로 생성

 

String 객체 생성의 예 :

 

String str1 = "abcd"; // 스트링 리터럴로 String 객체 생성
// 생성자 이용하여 String 객체 생성
char data[] = {'a', 'b', 'c', 'd'};
String str2 = new String(data);
String str3 = new String("abcd");

 

2. 스트링 리터럴과 new String()

스트링 리터럴과 new String()으로 생성된 스트링 객체는 서로 다르게 관리된다. 스트링 리터럴은 자바 내부에서 리터럴 테이블로 특별히 관리하여 동일한 리터럴을 공유시킨다. 그러나 new String()으로 생성된 스트링은 new를 이용하여 생성되는 다른 객체와 동일하게 힙 메모리에 생성된다.

 

* 스트링 객체는 수정이 불가능하다.

 

3. String 활용

다음은 String 클래스의 주요 메소드이다.

 

메소드 설명
char charAt(int index) index 인덱스에 있는 문자 값 리턴
int codePointAt(int index) index 인덱스에 있는 유니코드 값 리턴
int compareTo(String anotherString) 두 스트링을 사전 순으로 비교하여 두 스트링이 같으면 0, 
현 스트링이 anotherString보다 먼저 나오면 음수, 아니면 양수 리턴
String concat(String str) 현재 스트링 뒤에 str 스트링을 덧붙인 새로운 스트링 리턴
boolean contains(CharSequence s)  s에 지정된 문자들을 포함하고 있으면 true리턴
int length() 스트링의 길이(문자 개수) 리턴
String replace(Charsequence target, Charsequence replacement) target이 지정하는 일련의 문자들을 replacement가 지정하는 문자들로 변경한 스트링 리턴
String [] split(String regex) 정규식 regex에 일치하는 부분을 중심으로 스트링을 분리하고, 분리된 스트링들을 배열로 저장하여 리턴
String subString(int beginIndex) beginIndex 인덱스부터 시작하는 서브 스트링 리턴
String toLowerCase() 소문자로 변경한 스트링 리턴
String toUpperCase() 대문자로 변경한 스트링 리턴
String trim() 스트링 앞뒤의 공백 문자들을 제거한 스트링 리턴

 

(1) 문자열 비교 : int compareTo(String anotherString)

compareTo 메소드는 두 스트링을 사전 순으로 비교하여 두 스트링이 같으면 0, 현 스트링이 anotherString보다 먼저 나오면 음수, 아니면 양수를 리턴하는 메소드이다.

 

package Chapter6;

public class Example {
	public static void main(String [] args) {
		String java = "Java";
		String python = "Python";
		
		int res = java.compareTo(python);
		
		if(res == 0)
			System.out.println("the Same");
		else if(res < 0)
			System.out.println(java + " < " + python);
		else
			System.out.println(java+ " > " +python);
	}
}

 

실행 결과 : 

 

- "Java"가 "Python"보다 사전에서 앞에 나오므로 res는 음수가 되어 Java < Python 이 출력된다.

- 문자열이 같은지 비교하려면 equals() 메소드를 써야한다.

 

(2) 문자열 연결 : String concat(String str)

concat(String str) 메소드는 현재 스트링 뒤에 str 스트링을 덧붙인 새로운 스트링 리턴하는 메소드이다.

 

package Chapter6;

public class Example {
	public static void main(String [] args) {
		System.out.println("I love ".concat("Java."));
	}
}

 

실행 결과 : 

- "I love " 문자열 뒤에 "Java." 문자열을 덧붙인 문자열을 리턴한다.

 

(3) 공백 제거 : trim()

trim() 메소드는 문자열 앞뒤의 공백 문자들을 제거한 문자열을 리턴하는 메소드이다.

 

package Chapter6;

public class Example {
	public static void main(String [] args) {
		String a = "      12345      6789";
		String b = "    9876\t";
		
		System.out.println(a.trim());
		System.out.println(b.trim());
	}
}

 

실행 결과 : 

 

- 문자열 a에서 문자열 앞뒤의 공백이 제거되었다. 문자열 중간에 있는 공백은 제거되지 않는다.

- 문자열 b에서 문자열 앞의 공백과 뒤의 '\t'가 제거되었다.

 

(4) 문자열의 문자 : char charAt(int index)

charAt() 메소드를 이용하면 특정 위치에 있는 문자를 알아낼 수 있다.

 

package Chapter6;

public class Example {
	public static void main(String [] args) {
		String a = "class";
		char c = a.charAt(2);
		System.out.println(c);
	}
}

 

실행 결과 : 

 

- index 2번에 있는 문자 'a'가 출력된다.

 

charAt() 메소드는 다음과 같이 특정 문자가 몇 개 있는지 알 수 있다.

 

package Chapter6;

public class Example {
	public static void main(String [] args) {
		int count = 0;
		String a = "class";
		for(int i=0; i<a.length(); i++) {
			if(a.charAt(i) == 's')
				count++;
		}
		System.out.println(count);
	}
}

 

실행 결과 :