Java/Basic

[Java] scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); 란?

Jeong Jeon
반응형

Java를 조금더 딥하게 알고싶어 알고리즘 공부를 시작하게되었다.

한문제씩 풀어나가다 처음보는 것이 있어 적어 두려고한다.

아직 한참 모자르다...

 

모르는 코드 : scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");

 

1). 전체 코드

public class Solution {



    private static final Scanner scanner = new Scanner(System.in);

    public static void main(String[] args) {
        int N = scanner.nextInt();
        scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?");
        for(int i=1; i<=10; i++){
            System.out.println(N+" x "+i+" = "+(N*i));
        }
        scanner.close();
    }
}

 

2). 사용이유

int i = scan.nextInt();          // 1)
String s = scan.nextLine();   // 2)

위와같은 코드를 짤 때 첫번째 int 만 입력을 받고 그다음 nextLine() 부분을 건너띄는 경우가 발생한다.
nextInt() 에서 Enter 를 칠 때 발생하는 '개행문자'를 처리하지 않고 버퍼에 남기기 때문이다.

그래서 scanner에 남아있는 불필요한 것들을 제거하는 코드라고 생각하면 된다.

 

Scanner.nextLine()의 정규표현식

 

private static final String LINE_SEPARATOR_PATTERN = "\r\n|[\n\r\u2028\u2029\u0085]";

  • /r/n : Windows line ending
  • /n : UNIX line ending
  • /r : Macintosh (pre-OSX) line ending
  • \u2028 : LINE SEPARATOR
  • \u2029 : PARAGRAPH SEPARATOR
  • \u0085 : NEXT LINE(NEL)
반응형