본문 바로가기

coding/Java

[Java] String 클래스

Java에서의 String 클래스에 대해 알아보자.

 

자바에서는 String 인스턴스를 두 가지 방법으로 생성할 수 있다.

String str1 = new String("Simple String");
String str2 = "Simple String";

첫 번째 방법에서 알 수 있듯, String 클래스의 객체에 Simple String이라는 매개변수를 넘겨줌으로써 문자열을 출력할 수 있게 된다. 출력 결과는 같아도 참조하는 인스턴스에 차이가 있다.

 

import java.util.*;

public class FinalTermTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str1 = "Hello Java";
		String str2 = "Hello Java";
		
		String str3 = new String("Hello Java");
		String str4 = new String("Hello Java");
		
		if(str1 == str2)
			System.out.println("str1과 str2는 동일 인스턴스 참조");
		else
			System.out.println("str1과 str2는 다른 인스턴스 참조");
		if(str3 == str4)
			System.out.println("str3과 str4는 동일 인스턴스 참조");
		else
			System.out.println("str3과 str4는 다른 인스턴스 참조");
	}
}

 

str3와 str4는 다른 인스턴스를 참조하고 있고 메모리에 생성되는 주소도 다르다.

 

 

 

String 클래스의 여러가지 메소드

  • 문자열의 일부 추출: substring(int beginIndex)
  • 문자열의 내용 비교: equals(String anotherString), compareTo(String anotherString), compareToIgnoreCase(String anotherString)
  • 자료형의 값을 문자열로 바꾸기: valueOf(int i)
  • 문자열 연결시키기: concat(String str)

 

import java.util.*;

public class FinalTermTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str1 = "Hi";
		String str2 = "Good";
		String str3 = "Morning";
		String str4 = "morning";
		double pi = 2.718281;
		int time = 6;
		
		//문자열 일부 추출
		System.out.println(str3.substring(2));
		System.out.println(str3.substring(2, 5));
		System.out.println("---------------------");
		
		//문자열 내용 비교
		if(str3.equals(str4))
			System.out.println("같은 문자열");
		else
			System.out.println("다른 문자열");
		if(str3.compareTo(str4) == 0)
			System.out.println("같은 문자열");
		else if (str3.compareTo(str4) < 0) //리턴값이 0보다 작으면 앞에 문자열이 크다
			System.out.println("사전 앞에 위치하는 문자: " + str3);
		else
			System.out.println("사전 앞에 위치하는 문자: " + str4);
		if(str3.compareToIgnoreCase(str4) == 0)
			System.out.println("대소문자 무시하고 같음");
		else
			System.out.println("대소문자 무시하고 다름");
		System.out.println("---------------------");
		
		//기본 자료형 값을 문자열로 바꾸기
		String s1 = String.valueOf(pi);
		System.out.println(s1);
		System.out.println("---------------------");
		
		//문자열 연결시키기
		String s2 = str1.concat(str2);
		String s3 = s2.concat(str3);
		System.out.println(s3);
		System.out.println("Hmm~".concat(s3));
		System.out.println("Time: ".concat(String.valueOf(time)));
	}
}

 

  • 문자열 수정: StringBuilder()

//원래 String 객체의 경우 내부의 문자열을 수정할 수 없지만, StringBuilder 객체는 문자열을 저장하는 가변 버퍼를 가지고 있어서 수정 가능. 문자열의 크기가 늘어나면 내부 버퍼 크기를 자동 조절한다.

 

import java.util.*;

public class FinalTermTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		StringBuilder stbuf = new StringBuilder("Hello");
		
		//문자열 덧붙이기
		stbuf.append("Java");
		System.out.println(stbuf.toString());
		
		//문자열 일부 삭제
		stbuf.delete(0,  2);
		System.out.println(stbuf.toString());
		
		//문자열 일부 교체
		stbuf.replace(0,  3,  "Bye");
		System.out.println(stbuf.toString());
		
		//문자열 내용 뒤집기
		stbuf.reverse();
		System.out.println(stbuf.toString());
	}
}

StringBuilder를 출력할 때 뒤에 toString()을 계속 붙여주는걸 보니까 리턴 값이 문자열이 아닌가보다... 그럼...뭐지..??? toString()을 빼고 출력해봐도 똑같이 나온다. 교재에는 StringBuilder append(String str) 뭐 이런식으로 나오는 걸 봐선 리턴값이 아예 StringBuilder 클래스? 인가본데 그게 도통 뭔 뜻인지는 모르겠다ㅎ