본문 바로가기
Programming/Java

[자바/Java] 문자열2 - StringBuilder, StringTokenizer

by 코딩하는 랄로 2023. 10. 8.
728x90

StringBuilder

StringBuilder는 자바5부터 생긴 클래스로 String과 같이 문자열을 다루는 클래스이다. 쓰레드에 안전하지 않지만(thread-unsafe) 속도가 빠르다는 장점이 있다. 또한 저번 글에서 배운 String 클래스와는 다르게 mutable 클래스이기 때문에 메소드를 수행시 원본의 값이 변경된다.

 

자바 ver 1.0부터 존재했던 클래스인 StringBuffer 또한 문자열을 다루는 클래스이고 StringBuildr와 같은 기능(메소드)를 갖고 있다. StringBuilder와의 차이점은 쓰레드에 안전(thread-safe)한 대신에 속도가 느리다.

 

위에서 언급하였듯이, StringBuilder는 빠르고 또한 mutable하기 때문에 메소드 수행 후 반환값을 다시 참조해주는 과정이 없기 때문에 문자열을 '붙여 나가며' 완성하는 동작을 많이 하는 실무에서는 StringBuiler를 더 많이 사용한다.(코테에서도 StringBuilder를 사용해주는 것이 더 좋음!!)

 

 

메소드

StringBuilder, StringBuffer의 메소드중 유용한 메소드는 다음과 같다.

 

  • append()   :   문자열 이어 붙이기
  • delete(beginIndex, endIndex)   :   매개변수로 전달받은 인덱스 사이의 문자열 제거 : beginIndex ~ endIndex - 1
  • deleteCharAt(index)   :   특정 인덱스의 한 문자만 삭제
  • insert(index, String)   :   특정 위치에 문자열 삽입
  • reverse()   :   문자열을 거꾸로 뒤집어줌
  • setCharAt(index, char)   :   특정 위치 문자 변경
  • setLength()   :   문자열 길이 조정, 현재 문자열보다 길게 조정하면 공백으로 채워짐, 짧게 조정할 경우 나머지 문자 삭제
  • trimToSize()   :   배열의 남는 사이즈(뒷부분의 공백)을 모두 제거

 

 

 

StringTokenizer

StringTokenizer는 문자열을 분리할 때 사용하는 클래스이다. Stirng 문자열을 Tokenizer, 즉 토큰화한다라고 해석을 할 수 있는데 이는 특정 구분자(delemeter)를 통해 문자열을 쪼개서 여러개의 토큰으로 분리해주는 클래스인 것이다.

 

 

StringTokenizer 생성자

StringTokenizer를 생성하는 방식은 3가지가 있다.

// 띄어쓰기 기준으로 문자열을 분리
StringTokenizer st = new StringTokenizer(문자열);

// 구분자(delimeter)를 기준으로 문자열을 분리
StringTokenizer st = new StringTokenizer(문자열, 구분자);

// 구분자(delimeter)를 기준으로 문자열을 분리할 때 구분자도 토큰으로 넣을 지(true)
// 안 넣을 지(false) -> defualt는 false
StringTokenizer st = new StringTokenizer(문자열, 구분자, true/false);

 

 

StringTokenizer.nextToken()

이렇게 생성한 token들은 nextToken()을 통해 접근하여 사용할 수 있는데, 이 때 주의할 점으로는 nextToken()을 통해 각 token에 순서대로 접근하게 되고, 이미 한번 접근한 토근은 다시 돌아갈 수 없다!!(다시 돌아가야 할 경우, 해당 토큰을 저장해두는 작업이 필요한 것이죠!!)

String str = "Hello Java My Name Is Coding Ralro";

StringTokenizer st = new StringTokenizer(str);  //띄어쓰기를 구분자로 분리

System.out.println(st.nextToken());  //Hello
System.out.println(st.nextToken());  //Java
System.out.println(st.nextToken());  //My
System.out.println(st.nextToken());  //Name
System.out.println(st.nextToken());  //Is
System.out.println(st.nextToken());  //Coding
System.out.println(st.nextToken());  //Ralro

 

 

그 외 메소드

그 외에 StringTokenizer를 더욱 잘 다룰 수 있게 해주는 메소드로는 다음과 같이 있다.

 

  • hasMoreTokens()   :   남아있는 토큰이 있으면 true, 없으면 false
  • nextToken()   :   객체에서 다음 토큰을 반환
  • nextToken(String delim)   :   delim을 기준으로 다음 토큰을 반환
  • hasMoreElements()   :   hasMoreTokens와 동일하지만 엘레먼트보다는 토큰을 주로 사용
  • nextElements()   :   nextToken과 동일하지만 문자열이 아닌 객체를 리턴
  • countTokens()   :   총 토큰의 개수를 리턴
728x90