본문 바로가기

개발

Java - String 클래스

반응형

String 클래스
 - 데이터(char[]) + 메서드(문자열 관련)
public final class String implements java.io.Serializable, Comparable{
    private char[] value;
    ....
}

- 내용을 변경할 수 없는 불변(immutable) 클래스
- 덧셈 연산자를 이용한 문자열 결합은 성능이 떨어짐.
   문자열의 결합이나 변경이 잦다면, 내용을 변경가능한 StringBuffer를 사용

문자열 비교
 - String str = "abc"; 와
    String str = new String("abc"); 비교

String str1 = "abc";	// 문자열 리터럴 "abc"의 주소가 str1에 저장됨
String str2 = "abc";	// 문자열 리터럴 "abc"의 주소가 str2에 저장됨
String str3 = new String("abc");	// 새로운 String인스턴스를 생성
String str4 = new String("abc");	// 새로운 String인스턴스를 생성

1. str1와 str2
str1 -> 0x100:"abc" <- str2
>> 같은 "abc"를 참조하고 있다.
2. str3와 str4
str3 -> 0x200:"abc" 
str4 -> 0x300:"abc" 
>> 다른 "abc"를 참조하고 있다.

>>>  문자열 리터럴을 사용하는 경우 항상 같은 객체를 공유하고 
         new String()을 사용하는 경우 항상 새로운 객체가 만들어진다.

- 문자열 비교는 equals 이용하여 내용 비교

문자열 리터럴
 - 문자열 리터럴은 프로그램 실행시 자동으로 생성된다.(constant pool에 저장)
   그래서 같은 내용의 문자열 리터럴은 하나만 만들어진다.

빈 문자열 ("", empty string)
 - 내용이 없는 문자열. 크기가 0인 char형 배열을 저장하는 문자열
   String str = "";
 - 크기가 0인 배열을 생성하는 것은 어느 타입이나 가능
   char[] chArr = new char[0]; // 길이가 0 인 char 배열
   int[] iArr = {};
 - 문자(char)와 문자열(String)의 초기화
 String s = null;           >>>    String s = ""; // 빈 문자열로 초기화
 char c = '\u0000';     >>>    char c = ' ';  // 공백으로 초기화

String 클래스의 생성자와 메서드
 - String(String s) : 잘안쓴다
 - String(char [] value) <> toCharArray()
 - String(StringBuffer buf)
 - char charAt(int index)
 - int compareTo(String str) : 사전 순서로 비교 같으면 0 사전순으로 이전이면 음수, 이후면 양수
  int i = "aaa".compareTo("aaa") >> 0
  int i2 = "aaa".compareTo("bbb") >> -1
  int i3 = "bbb".compareTo("aaa") >> 1
 - String concat(String str) : 문자열뒤에 붙인다.
 - boolean contains(CharSequence s) : 지정된 문자열이 포함되었는지 검사한다.
   String s = "abcdefg";
   boolean b = s.contains("bc"); 
  *** CharSequence는 인터페이스 
        CharBuffer, Segment, String, StringBuffer, StringBuilder 이 이 인터페이스를 상속하기 때문에 여기 함수에 쓸 수 있다.
 - boolean endsWith(String suffix) : 지정된 문자열로 끝나는지 검사한다. <> startsWitch
 - boolean equalsIgnoreCase(String str) : 문자열 대소문자 구분 없이 비교
 - indexOf(int ch) / indexOf(String str)
 - indexOf(int ch, int pos) : pos : 검색 시작 위치
 - int lastIndexOf(int ch) / lastIndexOf(String str): 뒤에서부터 찾기
 - int length() : 문자열 길이
 - String[] split(String regex) : regex : 정규식
 - String[] split(String regex, int limit) : limit 몇개로 자를거니
  String animals = "dog,cat,bear";
  String [] arr = animals.split(",", 2); 
  arr[0] = "dog" / arr[1] = "cat,bear";
 - String substring(int begin, int end);, String substring(int begin);
 - String toLowerCase() : 소문자로 <> String toUpperCase() 대문자로 
 - String trim() : 공백 제거 
 - static String valueOf(boolean t / char c / int i / long l / float f / double d / Object o) >> 그냥 쓰는 거보다. 이게 속도가 더 빠르다. 참조변수의 경우 (ex Object) toString을 한 결과를 반환한다.

 

문자열 결합 
 join()과 StringJoiner 
 - join()은 여러 문자열 사이에 구분자를 넣어서 결합한다.
   String animals = "dog,cat,bear";
   String[] arr = animals.split(","); // 문자열 ','를 구분자로 나눠서 배열에 저장
   String str = String.join("-", arr); // 배열의 문자열을 '-'로 구분해서 결합
   System.out.println(str);   // dog-cat-bear

문자열과 기본형 간의 변환 
 - String.valueOf(int i ) : 숫자를 문자열로 
   int i = 100; 
   String str = i +"";
   String str1 = String.valueOf(i);
 - Integer.parseInt("100");  :문자열을 숫자로 
    Integer.valueOf("100"); :문자열을 숫자로 
    Integer i = Integer.valueOf("100"); // 원래는 반환 타입이 Integer
 - 숫자를 문자열로 바꾸는 방법 
 

반응형