[Java] String 클래스, 메소드

정보구니·2021년 12월 28일
0

Java

목록 보기
29/39
post-thumbnail

String 클래스


🔎 문자열 생성을 위한 두가지 방법

  • String str = new String("sample String");
  • String str = "sample String";

큰 따옴표를 이용한 문자열의 표현은 String 인스턴스 생성으로 이어지고, str은 해당 인스턴스의 참조값을 담는다.





🔎 문자열 생성을 위한 두가지 방법의 차이

  • 첫번째 방법은 서로 같은 인스턴스를 참조
  • 두번째 방법은 서로 다른 인스턴스를 참조

String 인스턴스는 immutable 인스턴스이기 때문에 한번 저장되면 문자열의 수정이 불가능하다.
그말은 즉 참조만 가능한 인스턴스이므로 효율을 위해 같은 인스턴스를 참조하게끔 한다.


class ImmutableStringExam {
	public static void main(String[] args) {
		// 첫번째 방법
		String str1 = "sample String";
		String str2 = "sample String";
		
		// 두번째 방법
		String str3 = new String("sample String");
		String str4 = new String("sample String");

		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는 다른 인스턴스 참조");
	}
	
}


// 출력 결과
str1과 str2는 동일 인스턴스 참조
str3과 str4는 다른 인스턴스 참조











String 클래스의 메소드


문자열 연결

🔎 concat 메소드

  • 연속 호출이 가능하다
String st1 = "coffee";
String st2 = "Bread";
		
String st3 = st1.concat(st2);
System.out.println(st3);
		
String st4 = "Fresh".concat(st3);
System.out.println(st4);


// 출력 결과
coffeeBread
FreshcoffeeBread





문자열 일부 추출

🔎 substring 메소드

String st = "abcdefg";
st.substring(2);  // 인덱스 2번째 이후의 문자열 추출
st.substring(2,4);  // 인덱스 2~3번째 범위의 문자열 추출
		
System.out.println(st.substring(2));
System.out.println(st.substring(2,4));


// 출력 결과
cdefg
cd





문자열의 내용 비교

🔎 equals 메소드

String st1 = "Lexicographically";
String st2 = "lexicographically";

		
if (st1.equals(st2))
	System.out.println("두 문자열은 같습니다.");
else
	System.out.println("두 문자열은 다릅니다");
    
    
// 결과 출력
두 문자열은 다릅니다



🔎 compareTo 메소드

  • 문자열의 사전상 순서 비교 ( 대소문자 구분 )
String st1 = "Lexicographically";
String st2 = "lexicographically";
int cmp;


cmp = st1.compareTo(st2); // 사전상 순서 비교
if (cmp == 0)
	System.out.println("두 문자열은 같습니다.");
else if (cmp < 0)
	System.out.println("사전의 앞에 위치하는 문자열: " + st1);
else
	System.out.println("사전의 앞에 위치하는 문자열: " + st2);
    

// 결과 출력
사전의 앞에 위치하는 문자열: Lexicographically



🔎 compareToIgnoreCase 메소드

  • 문자열의 사전상 순서 비교 ( 대소문자 구분 X )
String st1 = "Lexicographically";
String st2 = "lexicographically";
int cmp;

if (st1.compareToIgnoreCase(st2) == 0)  // 대소문자 구분 없이 사전상 순서 비교
	System.out.println("두 문자열은 같습니다.");
else
	System.out.println("두 문자열은 다릅니다.");
    
    
// 출력 결과
두 문자열은 같습니다.





기본 자료형의 값을 문자열로 바꾸기

🔎 valueOf 메소드

double e = 2.7182;
int n = 3;
		
String se = String.valueOf(e);
System.out.println(se);
String sn = String.valueOf(n);
		
System.out.println(se + sn);


// 출력 결과
2.71823





문자열 대체하기

🔎 replace vs replaceAll

  • String replace(Char oldChar, Char newChar)
  • String replaceAll(String regex, String replacement)
// 주민등록 번호 중간에 삽입된 -를 지우고 공백으로 채워서 출력
String resi = "990925-1012999";
System.out.println(resi.replace('-', ' '));
System.out.println(resi.replaceAll("-", " "));


// 출력 결과
990925 1012999
990925 1012999
// 주민등록 번호 중간에 삽입된 -를 지우고 공백 없이 출력
String resi = "990925-1012999";
System.out.println(resi.replaceAll("-", " "));

// System.out.println(resi.replace('-', ''));  // char타입은 반드시 문자 1개 이상이 필요하기 때문에 에러발생


// 출력 결과
9909251012999











StringBuilder 클래스


  • StringBuilder 클래스는 내부적으로 문자열을 저장하기 위한 메모리 공간을 갖는다.
  • String 클래스와 달리 문자추가, 수정, 삭제가 가능하다.




🔎 StringBuilder 클래스의 메소드

// 기본 자료형 데이터를 문자열 내용에 추가
public StringBuilder append(int i)


// 인덱스 start에서부터 end 이전까지의 내용을 삭제
public StringBuilder delete(int start, int end)


// 인덱스 start에서부터 end 이전까지의 내용을 str의 문자열로 대체
public StringBuilder reverse()


// 인덱스 start에서부터 end 이전까지의 내용만 담은 String 인스턴스의 생성 및 반환
public String substring(int start, int end)


// 저장된 문자열의 내용을 담은 String 인스턴스의 생성 및 반환
public String to String()





🔎 StirngBuffer 클래스와의 비교

  • 공통점
    • 생성자를 포함한 메소드의 수
    • 메소드의 기능
    • 메소드의 이름과 매개변수의 선언
  • 차이점
    • StirngBuffer 클래스는 쓰레드에 안전하지만, 속도가 느리다
    • StringBuilder 클래스는 쓰레드에 안전하지 않지만, 속도가 빠르다.











참고
열혈 자바 ch11-2 (Stirng 클래스)
열혈 자바 ch11-3 (Stirng 클래스의 메소드)

0개의 댓글