자바기초프로그래밍 - 문자열 (1)

honeyricecake·2022년 5월 3일
0

학교 수업 - 자바

목록 보기
10/16

String 클래스

CharSequence가 상위 클래스로 있고
이를 String, StringBuffer, StingBuilder가 상속하여 구현한다.

String은 변경 불가능!!
즉, String x= "Hello";
에 x += " World"; 를 하면 x 자체가 바뀐게 아니라 x가 새로운 "Hello World" 객체의 레퍼런스를 가지는 것이다.

CharSequence vs String

CharSequence 인터페이스 -> 구현은 안 되어있음

문자열을 처리를 위한 인터페이스
CharSequence 인터페이스를 구현 -> String, StringBuffer, StringBuilder 클래스

charAt(int index), length(), toString(), compare(), subSequence() 함수 등이 구성되어 있다.

String 클래스 - CharSequence, Serializavle, Comparable 인터페이스를 구현한 클래스

변경이 불가능 : immutable 클래스 (final)

  public final class String
  imolements java.io.Seiralizable, Comparable<String>, CharSequence, Constable, ConstantDecs{...}

-> 상속도 안 됨 (final class)

CharSequence와 String 메소드 비교

CharSequence에 있는 메소드가 String에서 구체화

int length();
char charAt(int index);
public String toString();

public String toString()
{
	return this;  // print가 String클래스와 Object 클래스를 따로 처리
}

CharSequence subSequence(int start, int end);

CharSequence와 String 변환

String -> CharSequence 변환

  • String이 CharSequence 인터페이스를 구현한 클래스

  • 단순히 upcasting해주면 됨 -> 묶어서 처리하려고

    CharSequence -> String 변환

    toString() 호출

String str = "Hello String";
CharSequence cs;
  
cs = str;  // String ->charSequence 변환
System.out.println("CharSequence: " + cs);

str = cs.toString();  // CharSequence -> String 변환 : toString() 호출
System.out.println("String " + str);

둘 다 Hello String 출력

String의 특징과 객체 생성

String - java.lang.String

String 클래스는 하나의 문자열 표현

// 스트링 값으로 스트링 객체 생성
String str1 = "abcd";

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

-> char 배열 또는 ""을 이용한 생성자에 문자열 삽입

String 생성자

String()
String(char[] value)
String(String original)
String(StringBuffer buffer)

String 객체 생성 방법

문자열로 생성
String s = "Hello";
JVM이 리터럴 관리, 응용프로그램 내에서 공유됨

String 객체로 생성

  • new String("문자열")
  • String t = new String("Hello");
  • 힙 메모리에 String 객체 생성 -> 같은 문자열도 중복 생성

스트링 객체의 주요 특징

스트링 객체는 수정 불가능

  • 문자열 변경 시 기존 문자열을 변경하지 않고 새로운 문자열이 생성됨.

    문자열 가공에눈 StringBuffer 클래스 사용

    String str = "Hello";
    str += " World";
    -> Hello World 생성, Hello는 가비지가 됨.

    String s = new String("Hello");
    String t = s.concat("Java"); // 스트링 s에 "Java"를 덧붙인 새로운 스트링 객체 리턴
    -> 스트링 s가 변한 것은 X

String 클래스의 주요 메소드 #1

char charAt(int index) : index에 있는 문자 값 리턴
int compareTo(String anotherString) : 두 문자열을 사전 순으로 비교
// 앞의 문자열이 먼저 나오면 -1, 같으면 0 뒤가 먼저 나오면 1 리턴

String concat(String str) : 주어진 문자열을 현재의 문자열 뒤에 붙임

boolean equals(Object obj) : 주어진 객체와 현재의 문자열을 비교함

int length() : 문자열의 길이를 리턴 -> 배열은 length가 멤버 변수이고 문자열에서 length()는 멤버 메소드이다.

String[] split(String regex) :
regex에 일치하는 부분을 중심으로 문자열을 분리, 분리된 문자열을 배열에 저장하여 반환

String subString(int beginIndex) : beginIndex부터 시작하는 서브 스트링 반환

String trim() : 문자열 앞뒤의 공백 문자들을 제거한 문자열 반환

String strip() : 문자열 앞뒤의 공백 문자들을 제거한 문자열 반환(JDK 11 이휴)
(Unicode 공백 문자 모두 제거)

String replace(char, char) : target이 지정하는 문자를 replacemaent가 지정하는 문자로 변경

String replace(CharSequence target, CharSequence replacement)

int indexOf(String str) : 문자열에서 검색어(str)가 처음 발견되는 index를 리턴 또는 -1
int indexOf(String str, int fromIndex) : 문자열의 fromIndex부터 검색어 str을 찾음
int indexOf(char ch, int fromIndex) : 문자열에서 해당 문자를 fromIndex로부터 검색함

String valueOf(int i) 등등의 valueOf 함수 : 각 인자를 문자열로 변환

문자열 연결

+연산자로 문자열 연결 : 피연산자에 문자열이나 객체가 포함되어 있는 경우 : 객체는 객체.toString()을 호출하여 문자열로 변환하여 연결
기본 타입값은 자동으로 문자열로 변환하여 연결

문자열 비교

  1. String.compareTo(String anotherString)
  2. String.equals(String anotherString)
  • 문자열 객체의 내용을 비교

  • 리턴값 : true / false

    == 은 문자열 객체의 주소 비교

문자열 비교 예제


public class StringCompare1 {
	
	public static void compareString(String s1, String s2)
	{
		if(s1.equals(s2))  // 동일하면 true 리턴
		{
			System.out.printf("s1(%s) 과 s2(%s)는 동일한 문자열\n", s1, s2);
		}
		
		else
		{
			System.out.printf("s1(%s) 과 s2(%s)는 다른 문자열\n", s1, s2);
		}
		
		System.out.printf("s1 객체 주소 : 0x%x\n", System.identityHashCode(s1));
		System.out.printf("s2 객체 주소 : 0x%x\n", System.identityHashCode(s2));
		
		if(s1 == s2)
		{
			System.out.printf("s1과 s2는 객체 주소가 동일\n");
		}
		
		else
		{
			System.out.printf("s1과 s2는 객체 주소가 다름\n");
		}
	}

	public static void main(String[] args) {
		String s1 = "Apple";
		String s2 = "Apple";
		
		String s3 = new String("Apple");
		String s4 = new String("Apple");
		String s5 = "apple";
		
		compareString(s1, s2);
		compareString(s1, s3);
		compareString(s3, s4);
		compareString(s1, s5);
	}

}

s1과 s2는 객체주소가 동일
s3와 s4는 객체주소가 다름
s1과 s3 역시 객체 주소가 다름

문자열 분리

String.split(String regex) 함수

  • regex값을 기준으로 문자열을 잘라서 문자열 배열을 리턴
  • 정규식 뿐만 아니라 단순 구분자도 사용 가능.
  String str1 = "boo:and:foo";
  String[] vocas = str1.split(":");
  
  for(int i = 0; i < vocas.length; i++)
  {
  	System.out.println(vocas[i]);
  }

vocas[0], [1], [2]에 문자열이 각각 저장

0개의 댓글