자료구조 정리

자바 문자열 관련 정리

Lv.1 ysg 2023. 10. 28. 19:59

자료구조나 코딩테스트 문제를 풀어보면서 문자열을 많이 다루게 된다

그래서 문자열을 다룰때 필요한 클래스나 메소드들을 간단하게 정리해보려고한다


문자열 메소드

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은 결과 값이 배열이다