[day09] java-basic : 문자열 API

1 분 소요

문자열 정의

  • 자바에서는 문자열을 무조건 객체로 취급한다. reference 참조형 데이터형이기 때문이다.

  • java.lang 패키지에 포함되어 있기 때문에 import하지 않아도 사용할 수 있다.

  • 문자열을 저장할 수 있는 클래스는 java.lang.String, java.lang.StringBuffer, java.lang.StringBuilder 클래스를 제공한다.

  • 변화가 일어나는 경우 String클래스를 사용하지 않고, 한 번 생성된 다음 변하지 않는 문자열에 보통 String 클래스를 사용한다.

  • String은 char의 배열로 이루어져 있기 때문에 공간이 한 번 만들어지면 크기를 절대 변경할 수 없기 때문이다.

  • 즉, Stringdms 두 문자열을 합친때 기존의 문자열 공간이 늘어나는 것이 아니라 새로운 공간이 생기고 합쳐진 문자열이 저장되는 것이기 때문에 변화가 잦은 경우에는 적합하지 않다.

  • 보통 변화하는 문자열의 경우에는 StringBuilder(비동기화, 1.5이후)와 StringBuffer(동기화)를 사용한다.

  • https://docs.oracle.com/javase/8/docs/api/index.html

String 클래스

  • 문자열의 길이를 알려주는 메소드 : length()

  • 특정한 위치의 문자열 추출하는 메소드 : charAt(int i)

  • 문자열을 배열로 변환하는 메소드 : getChar()

  • 문자열의 내용를 비교하는 메소드 : boolean equals(Object str) / boolean eqaulsIgnoreCase(String str) / startsWith() / endsWith()

  • 사전순으로, 앞쪽에 위치(-)하는지 뒷쪽(+)에 위치하는지 같은지(0) 확인하는 메소드 : int compareTo(String str)
    • 작동 원리 : charAt(0) ~ charAt(str.length())까지 도는데, 각 번지수의 유니코드 값을 뺀 차가 0이 아닐때까지만 돌면서 차가 음수인지 양수인지 0인지를 반환한다.
    • 만약 음수라면 순서에 따라 앞에 온다는 뜻이다.
  • 문자열이 포함되어 있는지 확인하기 : boolean contains(String str)

String의 비교

  • 주소 비교 : ==

  • 내용 비교 : .equals()

  • 아래 경우에 내용 비교가 이루어진 것처럼 보이지만, 실제로는 “Hello”가 같은 주소값에 저장되어 공유하기 때문에 같다는 결과가 도출된 것이다.

// 문자열 상수 주소비교 ==============================================
String str = "Hello";
String str2 = "Hello";

if(str == str2)
System.out.println("str == str2");
else
System.out.println("str != str2");

String 탐색

  • 0 번지부터 검색하며 위치 반환하기 : int indexOf(String str)

  • 마지막 번지부터 검색하며 위치 반환하기 : int lastindexOf(String str)

String 변환

  • 사실상 변환은 아니고 변환된 String을 return하는 메소드들이다.

  • 부분 문자열 반환 : String substring(int startIndex, int endIndex)
  • 결합된 문자열 반환 : String concat(String constr)
  • 치환된 문자열 반환 : String replace(char original, char replacement)
  • 시작과 끝부분의 공백 제거해서 반환 : String trim()
  • 소문자로 반환 : String toLowerCase()
  • 대문자로 반환 : String toUpperCase()
  • regexp를 기준으로 문자열 나누기(하나의 문자열을 특정 구분자를 가지고 여러개의 문자열로 쪼개는 것) : String[] split(String regexp)

String 형변환

  • String.valueOf() : 어떤 데이터형이 나오던 문자열로 바꾸는 메소드
int sum = 0;

for(int i = 0; i < 100000; i++) {
  //str += i;
  sum += i;
}

long end = System.currentTimeMillis();