2022. 3. 12. 03:02ㆍJava
코딩 테스트 혹은 알고리즘 문제를 접하다보면 무수히 많은 문자열 문제를 접하게 된다.
자바는 언어 중에서 좀 문자열에 불친절한 언어이기 때문에 답답할 때가 종종 있다.
하지만 어쩌겠는가, 어차피 쓸거 잘 써보자.
자바에서는 문자열을 자르는 방법에는 크게 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 |