본문 바로가기
java/개념

String 클래스

by unhyepnhj 2024. 6. 7.

String 클래스

- java.lang 패키지에 포함

- 문자열을 나타냄

- 스트링 리터럴은 자바 컴파일러에 의해 모두 String 객체로 처리

//다양한 방법으로 String 객체 생성 가능

//스트링 리터럴로 String 객체 생성
String str1 = "abcd";

//String 클래스의 생성자를 이용하여 String 객체 생성
char data[] = {'a', 'b', 'c', 'd'};
String str2 = new String(data);
String str3 = new String("abcd");	//str2, str3 모두 "abcd" 문자열

 

String 생성자

 

스트링 리터럴과 new String()

- 스트링 리터럴과 new String()으로 생성된 스트링 객체는 서로 다르게 관리됨

- 스트링 리터럴은 JVM 이 관리, 응용프로그래램 내에서 공유

- new String()으로 생성된 스트링은 힙 메모리에 생성됨

a~c는 스트링 리터럴, d~f는 String 객체로 생성

 

※스트링 객체는 수정 불가

- 리터럴이든 new String()이든 일단 생성된 스트링 객체는 수정이 불가능

String s = new String("Hello");
String t = s.concat("Java");	//스트링 s에 "Java"를 덧붙인 새로운 스트링 객체 리턴

- 위 코드를 실행하면 s.concat()는 "HelloJava"를 리턴하며 t가 이를 가리킴

- s가 수정된 것이 아니라 새로운 스트링 객체가 리턴된 것이므로 s는 여전히 "Hello"를 가리킴

- 한번 만들어진 스트링은 수정이 불가하므로 스트링이 공유되어도(위 그림의 a, c처럼) 문제x


String 활용


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

- 문자열이 같으면 0을 리턴하는 메소드

- 기준 문자열이 비교할 문자열(anotherString)보다 사전에 먼저 나오면 음수 리턴

- 기준 문자열이 사전에 나중에 나오면 양수 리턴

String java = "Java";
String cpp = "C++";
int res = java.compareTo(cpp);
if(res==0) System.out.println("same");
else if(res<0) System.out.println("java+"<"+cpp);
else System.out.println(java+">"+cpp);

//실행 결과: Java>C++

- J가 C보다 사전에서 뒤에 나오므로 res는 양수

- 문자열 순서를 비교할 필요가 없을 때는 equals() 메소드 사용을 추천


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

 

+ 연산의 피연산자에 문자열이나 객체가 포함된 경우 

- 객체는 객체.toString() 메소드를 호출하여 문자열로 변환한 후 연결

- 기본 타입 값은 해당 값을 문자열로 변환하여 연결

 

String concat(String str)을 이용하여 연결

"I love".concat("Java")
//실행 시 "I love Java" 리턴

- 기존 String 객체에 연결되지 않고 새로운 스트링 객체 리턴

String s1 = "abcd";
String s2 = "efgh";
s1=s1.concat(s2);

- concat()은 새로운 문자열을 생성

- s1.concat(s2)는 새로운 스트링 객체인 "abcdefgh"를 리턴하고 s1이 이를 가리킴


문자열 내 공백 제거: String trim()

String a = "  abcd  def  ";
String b = "  xyz\t";
String c = a.trim();	// c = "abcd  def", 문자열 중간의 공백은 제거하지 않음
String d = b.trim();	// d = "xyz", 스페이스와 '\t' 모두 제거됨

 

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

String a = "class";
char c = a.charAt(2); // c='a'

- 문자열의 특정 위치에 있는 문자를 알아냄 

int count = 0;
String a = "class";
for(int i=0; i<a.length(); i++){
	if(a.charAt(i)=='s')
    	count++;
    }
}

- 이를 응용해 문자열 내에 특정 문자가 몇 개 있는지 알아낼 수 있음


예제 6-7 String 클래스의 활용 예

public class StringEx {
	public static void main(String[] args) {
		String a=new String("    C#");
		String b=new String(",C++    ");
		
		System.out.println(a+"의 길이는 "+a.length());	//문자열 길이
		System.out.println(a.contains("#"));		//a에 '#'이 포함되었는지
		
		a=a.concat(b);			//문자열 연결-a에 b를 연결한 새로운 문자열 리턴
		System.out.println(a);

		a=a.trim();			//문자열 앞뒤 공백 제거(중간 공백 제거x)
		System.out.println(a);
		
		a=a.replace("C#", "Java");	//문자열 대치
		System.out.println(a);
		
		String s[]=a.split(",");	//','을 기준으로 문자열 분리
		for(int i=0; i<s.length; i++) {
			System.out.println("분리된 문자열 "+(i+1)+": "+s[i]);
		}
		
		a=a.substring(5);	//인덱스 5부터 끝까지의 substring 리턴
		System.out.println(a);
		
		char c=a.charAt(2);
		System.out.println(c);	//인덱스 2의 문자 리턴
	}
}

실행 결과
실행 과정

'java > 개념' 카테고리의 다른 글

StringTokenizer 클래스  (0) 2024.06.07
StringBuffer 클래스  (0) 2024.06.07
박싱과 언박싱  (0) 2024.06.04
Object 클래스  (0) 2024.06.02
JDK에서 제공하는 패키지  (0) 2024.06.02