-
useDelimiter(), StringTokenizer(), split() 사용법과 차이점Algorithm 2023. 3. 20. 20:34
하루입니다.
문제를 풀다 문득 든 의문점.
1. 왜 useDelimiter에는 (.)이 아닌 (\\.)을 입력해야 하는 것이며
2. 다른 것들을 사용해도 \\.과 같은 구분자 형식을 사용해야 하는 것인가?
그래서 준비했다 빠밤 with chatGPT.
1. useDelimiter()
왜 .이 아닌 \\.을 사용해야 할까?
- useDelimiter는 구분자를 그대로의 문자열이 아닌 정규식으로 받아들이기 때문이다.
- util 패키지
- 특이점 : Scanner의 함수이기에 nextInt()를 통해 형변환 없이 int형으로 사용 가능하다.
- 3.4.5. 와 같이 뒤를 .으로 끝내야 함.
- 사용법 : sc.useDelimiter("구분자");
import java.util.*; import java.lang.*; public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); sc.useDelimiter("\\."); int a = sc.nextInt(); int b = sc.nextInt(); int c = sc.nextInt(); System.out.print(a + "-" + b+"-" + c); sc.close(); } }2. StringTokenizer();
- lang 패키지
- 구분자를 문자열로 받아들이기에 (".") 사용이 가능하다.
- 특이점 : next()로 한번에 받고 st.nextToken() 사용 후 int로 형변환한다.
- 3.4.5 와 같이 뒤를 .으로 끝내지 않아도 된다.
- 사용법 : StringTokenizer st = new StringTokenizer(문자열, "구분자");
import java.util.*; import java.lang.*; public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); String date = sc.next(); StringTokenizer st = new StringTokenizer(date, "."); int a = Integer.parseInt(st.nextToken()); int b = Integer.parseInt(st.nextToken()); int c = Integer.parseInt(st.nextToken()); System.out.print(a + "-" + b+"-" + c); sc.close(); } }3. split()
- lang 패키지
- useDelimiter는 구분자를 그대로의 문자열이 아닌 정규식으로 받아들이기 때문이다.
- 특이점 : 배열로 값을 받는다.
- 3.4.5 와 같이 뒤를 .으로 끝내지 않아도 된다.
- 사용법 : String[] 배열명 = 문자열.split("구분자");
import java.util.*; import java.lang.*; public class Main { public static void main(String args[]) { Scanner sc = new Scanner(System.in); String date = sc.next(); String[] tokens = date.split("\\."); int a = Integer.parseInt(tokens[0]); int b = Integer.parseInt(tokens[1]); int c = Integer.parseInt(tokens[2]); System.out.print(a + "-" + b+"-" + c); sc.close(); } }
왜 StringTokenizer의 구분자는 .이고, split의 구분자는 \\.이야? 앞에 \\를 붙이는 이유가 뭐야?
StringTokenizer 클래스와 split() 메서드 모두 구분자(delimiter)를 문자열로 입력받습니다. 그런데 Java에서 \는 이스케이프 문자(escape character)로 사용되므로, 구분자가 .인 경우 split() 메서드에서는 구분자를 "."로 입력받으면 제대로 동작하지 않을 수 있습니다. 이를 방지하기 위해 split() 메서드에서는 구분자를 "\\."와 같이 이스케이프 문자로 처리해야 합니다.
반면에, StringTokenizer 클래스는 이스케이프 문자를 사용하지 않고 구분자를 문자열 그대로 입력받습니다. 그래서 StringTokenizer 클래스에서는 구분자를 "."로 입력받으면 됩니다.
즉, split() 메서드에서는 이스케이프 문자를 사용하여 문자열로서의 .을 나타내고, StringTokenizer 클래스에서는 이스케이프 문자를 사용하지 않고 일반 문자열로서의 .를 나타냅니다.
'Algorithm' 카테고리의 다른 글
와! 백준 실버 찍었다! (0) 2023.04.03 얏호! LeedCode Contest 첫 참여 후기! (0) 2023.04.02 useDelimiter StringTokenizer 차이점 (0) 2023.03.20