(Java) 문자열 잘라 배열에 저장

2022. 3. 12. 03:02Java

반응형

코딩 테스트 혹은 알고리즘 문제를 접하다보면 무수히 많은 문자열 문제를 접하게 된다.

 

자바는 언어 중에서 좀 문자열에 불친절한 언어이기 때문에 답답할 때가 종종 있다.

 

하지만 어쩌겠는가, 어차피 쓸거 잘 써보자.

 


자바에서는 문자열을 자르는 방법에는 크게 2가지가 존재한다.(delimiter로)

 

첫 번째는 split을 사용하는 것이고, 두 번째는 StringTokenizer를 사용하는 것이다.

 

그럼 split부터 알아보자.

 

🏴󠁩󠁤󠁪󠁷󠁿String.split()


자바 String에는 기본 메서드로 split을 제공해준다.(고맙다)

 

그리고 이 split은 배열은 반환한다.(개꿀)

 

class Main {
	public static void main(String[] args) {
    	String s = "abc def ghi";
       	String[] list = s.split(" ");
    }
}

파이썬과 다르게 반드시 딜리미터(공백 혹은 다른 문자)가 있어야한다. 

 

이렇게 잘라주면 알아서 배열로 변환해서 준다.

 

너무 편하다.

 

🏴󠁩󠁤󠁪󠁷󠁿StringTokenizer


StringToknizer는 쓰기도 귀찮게 생겼는데, 친절하지도 않다.

배열로 반환을 해주지도 않으며, 인덱스 접근도 허용하지 않는다.

 

그럼 왜 쓰는지 궁금할 것이다.

 

StrintTokenizer가 split보다 속다가 빠르다. 그리고 하나하나 접근해야한다면 이게 더 낫다.

 

왜 그런지는 코드를 보면서 알아보자.

 

class Main{
	public static void main(String[] args) {
        	String s = "abc def";
        	StringTokenizer stringTokenizer = new StringTokenizer(s, " ");
        	System.out.println(stringTokenizer.nextToken());
        	System.out.println(stringTokenizer.nextToken());
    }
}

 

StringTokenizer는 이렇게 토큰을 하나하나 뽑아낼 수 있다.

하지만 split은 하나하나 뽑지 못하고 for문을 또 돌려야한다.(속도가 느려지겠죠?)

 

근데 이렇게 하면 토큰이 어디까지 인지, 몇 개인지 어떻게 알아!! 라고 할 수 있다. 

 

아래 코드를 보자.

 

class Main {
	public static void main(String[] args) {
        String s = "abc def";
        StringTokenizer stringTokenizer = new StringTokenizer(s, " ");
        while(stringTokenizer.hasMoreTokens()) {
            System.out.println(stringTokenizer.nextToken());
        }
        System.out.println(stringTokenizer.countTokens()); // 개수
    }
}

이렇게 사용하면 토큰이 남아 있을 때까지 출력하는 코드를 작성할 수 있다.(출력할 일은 없다)

그리고 countTokens를 활용해서 토큰의 개수를 알 수 있다.

 

🏴󠁩󠁤󠁪󠁷󠁿그래서 뭐가 더 좋나?


코드에 그런건 없다.

둘다 좋다.

 

둘다 적재적소에 잘 쓰면 된다. 

반응형

'Java' 카테고리의 다른 글

(Java) JVM 구조와 이해  (0) 2022.07.16
(Java) StringBuilder 문자열 만들기  (0) 2022.03.12
logging이란?  (0) 2022.02.23
(Java) JDBC란?  (0) 2022.02.20
JAVA - JVM에 대해 알아보자 -1  (0) 2022.02.18