Post-IT

Java 자바 문자열 자르기 substring(), split(), StringTokenizer() 본문

자바

Java 자바 문자열 자르기 substring(), split(), StringTokenizer()

생각없는 개발자 2022. 6. 26. 00:40

우리가 프로그래밍을 하다 보면 문자열을 다루는 경우가 자주 있고, 문자열의 전체가 아닌 특정 부분만을 사용하는 경우가 자주 발생한다. 매번 인터넷에 검색해 가면서 여러가지 방법을 사용해 보았는데, 상황에 따라 편한 방법이 분명히 존재한다. 이 글에서 한방에 정리해 보고자 한다.

 

1. substring() 메소드

substring 메소드는 String 클래스 메소드로 사용 방법은 다음과 같다. substring 메소드는 매개변수에 따라 두가지가 존재한다.

String str = "0123456789";

// 1번
str1 = str.substring(5);
System.out.println(str1);

// 2번
str2 = str.substring(2,6);
System.out.println(str2);

// 출력 결과
01234
2345
  • String substring(int beginindex) : 시작 인덱스를 넘겨주는 메소드로, beginindex에 해당하는 앞에 존재하는 문자열은 제외시킨다. 따라서 str1을 출력하면 "01234" 가 출력된다.
  • String substring(int beginindex, int endindex) :  시작과 끝 인덱스를 모두 지정해주면, beginindex ~ endindex를 제외하고 앞뒤의 문자열을 모두 제외 시킨다. 따라서 str2를 출력하면 "2345"가 출력된다.

2. split() 메소드

split 메소드 역시 String 클래스에 존제하는 메소드로 매개변수에 따라 두가지 방식이 있다.

String str = "123-456-789";

// 1번
String [] arr1 = str.split("-");
for(int i=0; i<arr1.length; i++){
	System.out.print(arr1[i] + " ");
}
System.out.print("\n");
// 2번
String [] arr2 = str.split("-", 2);
for(int i=0; i<arr2.length; i++){
	System.out.print(arr2[i] + " ");
}
// 실행결과
123 456 789
123 456-789
  • String[] split(String regex) : 분리할 기준 문자열을 넘겨주는 메소드로, regex 문자열을 기준으로 문자열을 나눠서 배열로 반환하는 메소드이다. 나누어지는 문자열의 갯수 상관없이 전부 나눠서 배열로 리턴한다.
  • String[] split(String regex, int limit) : 분리할 기준 문자열과 함께 분할되는 갯수를 한정해준다. limit값으로 3을 전달해주면 최대 앞에서부터 문자열을 잘라 배열의 갯수가 3개가 되는 순간부터는 분할을 그만두고 현재까지 분할한 문자열들을 리턴해준다.

3. StringTokenizer 클래스

StringTokenizer 클래스는 문자열을 우리가 지정한 구분자로 나누어주는 클래스입니다. StringTokenizer 클래스로 나누어진 문자열들을 각각 토큰이라고 합니다. 해당 클래스를 사용하기 위해서는 java.util.StringTokenizer를 import 해주어야 합니다. 한번만 익혀두면 사용법도 쉽고 클래스에 메소드가 많지 않습니다.

StringTokenizer 클래스에는 3개의 생성자가 존재합니다.

  • public StringTokenizer(String str) : 전달된 매개변수 str을 기본 delimiter들로 분리해 줍니다. 여기서 기본 delimiter는 공백문자들("\t", "\n", "\r")을 지칭합니다.
  • public StringTokenizer(String str, String delim) : 전달된 매개변수 str을 전달받은 delimiter들로 분리해줍니다.
  • public StringTokenizer(String str, String delim, boolean returndelims) : 전달된 매개변수 str을 전달받은 delimiter들로 분리된다는 것은 2번째 생성자와 같습니다. 하지만 3번째 매개변수 returndelims가 true라면 delimiter도 token에 포함 시키는 것이고, false라면 token에서 제외시킵니다.

역시 글보단 코드로 직접 보는게 이해가 빠를 것 같습니다. 다음은 각각의 생성자로 생성된 토큰들 입니다.

StringTokenizer("123 456 789");
// token -> "123", "456", "789"
StringTokenizer("123-456-789", "-");
// token -> "123", "456", "789"
StringTokenizer("123-456-789", "-", true);
// token -> "123", "-", "456", "-", "789"
StringTokenizer("123-456-789", "-", false);
// token -> "123", "456", "789"

마지막으로 StringTokenizer 메소드를 살펴보겠습니다.

  1. int countTokens() : 남아있는 token의 갯수를 반환합니다. 
  2. boolean hasMoreElements() / boolean hasMoreTokens() : 다음의 토큰이 있는지 True / False 로 반환합니다. 메서드의 이름은 다르지만 둘은 엄연히 같은 역할을 합니다.
  3. Object nextElement() : 다음의 토큰을 Object 타입으로 반환합니다.
  4. String nextToken() : 다음의 토큰을 String 타입으로 반환합니다.

이상으로 자바에서 문자열을 자르는 다양한 방법을 알아보았습니다. 3가지 방식 모두 장단점이 존재하는 것 같고, 상황에 맞게 사용할 수 있게 이해하고 있으면 좋을것 같아요!

'자바' 카테고리의 다른 글

[Java] 큐(Queue) add()와 offer()의 차이점  (0) 2025.02.12
Java? 자바?  (0) 2022.06.10