자바 문자열 관련 정리
자료구조나 코딩테스트 문제를 풀어보면서 문자열을 많이 다루게 된다
그래서 문자열을 다룰때 필요한 클래스나 메소드들을 간단하게 정리해보려고한다
문자열 메소드
1. split
split은 특정문자를 기준으로 문자열을 자른후 배열에 담아주는 메소드이다
사용
- 문자열을 한글자씩 나눌때에도 사용
- 구분자가 여러개도 가능
//문자열 한글자씩 나눔
String word = "study";
String[] arrary_word = word.split("");
//구분자 여러개 가능
String[] words = s.split("[.,!?\\s]");
2. indexof
indexof는 특정 문자의 인덱스를 반환해주고 찾지 못했을 경우에는 -1을 반환해주는 메소드이다
사용
- 특정문자의 다음 위치를 알수 있다
//특정문자 다음 인덱스
String s = "Hello! World!";
s.indexOf("!");
s.indexOf("!",s.indexOf("!") + 1);
3. replace
replace는 특정 문자열을 치환할때 사용하는 메소드이다
사용
- 특정 문자열을 제거하는데 사용할수도 있다
//특정 문자열 제거
String s = "hello world";
String del = "l";
s = s.replace("l",""); // heo word
*replace 와 replaceAll 차이점 : replace와 달리 replaceAll은 첫번째 매개변수가 정규식 적용이 가능하다
문자열 클래스
1. StringBuilder / StringBuffer
불변인 String 객체는 한번 생성되면 변경할수 없기 때문에 문자열을 변경하게되는 행위는 메모리 할당과 해제를 반복시키기때문에 성능적으로 효율이 좋지 않다 이러한 점들을 해결할수있는 클래스들이다
//사용 예시
StringBuilder sb = new StringBuilder();
sb.append("test");
answer = sb.toString();
* StringBuilder와 StringBuffer 차이점 : 멀티쓰레드 환경에 thread - safe 여부가 다르다는 점이다 .
StringBuffer는 thread-safe 하므로 여러 쓰레드에서 동시에 해당 문자열에 접근한다면 사용을 고려하고, 그렇지 않다면 StringBuilder를 사용하는 것이 성능에 더 유리하다. (성능과 thread-safe는 반비례라고 생각하면 된다.)
2. StringTokenizer
하나의 문자열을 여러 개의 토큰으로 분리하는 클래스이고 주로 입력받은 문자열에 대해서 사용한다
//사용 예시
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
*StringTokenizer 와 split 차이점 : java.utils에 포함되어 있는 클래스, String 클래스에 속해있는 메소드
StringTokenizer는 빈 문자열을 토큰으로 인식 하지 않고 결과 값이 문자열인 반면 split은 결과 값이 배열이다