[java] Scanner useDelimiter() Method로 구분자 변경하기
Updated:
문제 설명
어떤 형식에 맞추어 시간이 입력될 때, 그대로 출력하는 연습을 해보자.
입력 예시
3:16
출력 예시
3:16
- ‘입력받은 그대로 출력하기’에 초점을 맞춰서 한 라인을 String 문자열 그대로 입력 받는 nextLine() 메서드를 사용했다. 아래가 1차로 구현한 코드이다.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String time = sc.nextLine();
System.out.printf("%s", time);
sc.close();
}
}
- 통과는 했지만, 수정할 거리가 많아 보인다. 입력 데이터가 시간이니 String이 아니라 int형을 쓰는 게 맞는 것 같고. ‘어떤 형식에 맞추어서 시간이 입력될 때’라고 했으니 시간:분 이라는 형식이 전제조건이 되야할 것 같다. next()로 받을 때 기본적으로 공백으로 입력 데이터가 구분되어지므로 공백을 “:” 로 변환하여 입력받으면 되지 않을까?
- 구분자를 변환하는 방법을 찾아보니 useDelimiter() Method 라는 게 있다.
The scanner can also use delimiters other than whitespace. This example reads several items in from a string:
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();
- 공식 문서를 보니, 스캐너는 공백 이외의 구분 기호도 사용할 수 있다.고 한다. 사용 예제를 참고해서 구분자를 변경해보았다.
- 아래는 2차로 구현한 최종 코드이고, 다행히 통과되었다.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
sc = new Scanner(sc.next()).useDelimiter(":"); //next()의 구분자를 :으로 변경
int h = sc.nextInt(); //입력할 때 공백 대신 : 로 구분할 수 있다.
int m = sc.nextInt();
System.out.printf("%d:%d", h, m);
sc.close();
}
}
- 새삼 java에서 제공하는 메소드가 다양하다는 걸 느꼈다. 메소드를 처음부터 일일이 다 외울 순 없어도, 이 문제에서 사용가능한 메서드는 없을까? 찾아보고 활용해보면 그것만큼은 체득이 되는 것 같다.