문자열은 내부적으로 클래스
로 구성되어 있다.
내부에는 문자의 배열로 된 데이터가 있다. (char[])
문자열 편집은 String을 쓰지 않고 Builder나 Buffer 등을 사용한다.
한번 만든 문자열은 변하지 않습니다. (Immutable)
문자열을 연결한다 했을 때, 하나의 문자열에 값을 더하는 것이 아니라 새로운 문자열이 생성되는 것이다.
String str1 = new String("abc") : 인스턴스로 생성되는 방식
String str2 = "abc" : String 상수풀에 있는 문자열을 가리킨다.
String s1 = "문자열 생성 방법";
String s2 = new String("문자열 생성 방법2"); //클래스 생성자 권장하지 않음.
String s3 = "abcde"; // 상수풀에 있는 문자열을 공유한다.
String s4 = "abcde"; // 상수풀에 있는 문자열을 공유한다.
String s5 = new String("abcde");
s3 == s4 : //true 메모리 참조값에 대한 것,문자열을 곧바로 생성할 경우 상수 풀에서 찾아 사용(상수 풀이라는 공간에 저장되어있음)
s3 == s5 : //false 문자열을 클래스로 생성할 경우 새로운 값을 생성하므로 false.
s3.equals(s4) // true
s3.equals(s5) // true
메소드 | 사용방법 | 메소드 선언 | 설명 |
---|---|---|---|
length() | s.length() | public int length() | 문자열의 길이를 나타냄 |
charAt() | s.charAt(2) | public char charAt(int index) | index번째에 위치한 문자 출력 |
indexOf() | s.indexOf('a') | public int indexOf(char ch) | ch가 위치한 index 출력. 없을 시 -1 |
equals() | s.equals("This is a String") | public boolean equals(Object anObject) | anObject와 비교한 결과 출력 |
equalsIgnoreCase()) | s.equalsIgnoreCase("this is a string")) | public boolean equalsIgnoreCase(String anotherString) | 대소문자 구분없이 anotherString과 비교 결과 출력 |
replace() | s.replace('i','t') | public String replace(char odlChar, char newChar) | oldChar를 찾아 newChar로 변경된 문자열 출력 |
substring() | s.substring(3,9) | public String substring(int beginIndex, int endIndex) | 문자열을 beginIndex부터 endIndex-1까지 잘라서 출력 |
trim() | s.trim() | public String trim() | 문자열 좌우 공백을 없앤 결과를 출력 |
matches() | s.matches(String regex) | public boolean matches(String regex) | 문자열을 정규표현식 regex 확인 결과 출력 |
split() | s.split(String regex) | public String[] split(String regex) | 문자열을 정규표현식 형태로 나눈 후 배열로 출력 |
repeat() | s.repeat(3) | public String repeat(int count) | count만큼 문자열을 반복해주는 함수 |
toCharArray() | s.toCharArray() | public char[] toCharArray() | 문자열을 char형 배열로 바꿔주는 메소드 |
가변적인 char형 배열로 멤버변수를 가지고 있는 클래스
문자열을 변경하거나 연결하는 경우 사용하면 편리한 클래스
StringBuffer는 멀티 쓰레드 프로그래밍에서 동기화(Synchronisation)이 보장된다.
단일 쓰레드 프로그래밍에서는 StringBuilder를 사용하는 것이 좋다.
StringBuilder,StringBuffer는 String타입이 아니기 때문에 toString() 메소드를 사용하여 String으로 반환해야한다.