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
- 숫자를 문자열로 바꾸는 방법
'개발' 카테고리의 다른 글
Java - StringBuilder 클래스 / Math 클래스 (0) | 2021.06.06 |
---|---|
Java - StringBuffer 클래스 (0) | 2021.06.05 |
Java - Object 클래스 (0) | 2021.06.05 |
Java - 오류 / 예외 처리하기 (0) | 2021.06.05 |
Java - 내부 클래스(inner class) / 익명 클래스(anonymous class) (0) | 2021.06.05 |