Search code examples
javajava.util.scanner

What does scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?") mean?


I have been solving some hackerank basic JAVA question , one of the problem statement had following piece of code:

import java.io.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;

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])?");
        scanner.close();
        if(N%2!=0){
            System.out.println("Weird");
        }
        else if(N%2==0 && N<=5 && N>=2){
             System.out.println("Not Weird");

        }
        else if(N%2==0 && N<=20 && N>=6){
             System.out.println("Weird");
    }
    else if(N%2==0 && N>20){
             System.out.println("Not Weird");
}}}

Can you explain what does "scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?")" I know it skip certain patterns but what are in the parenthesis ?


Solution

  • It roughtly means skip newlines

    \n, \r, \n\r, \r\n, U+0085 U+2028 U+2029 are all sequences of characters or characters used as line separators.

    \n is LF or Line Feed or NewLine
    \r is CR or Carriage Return 
    \r\n CR+LF is used in Windows as newLine sequence
    U+0085 NEL is the Unicode character for NExt Line
    U+2028 is the Unicode character for Line Separator
    U+2029 is the Unicode character for Paragraph Separator
    

    All of those were used to break a file in lines. What you see there is a Regex pattern, used to search inside strings. It's read as:

    If you meat \n\r
    or |
    one of the characters in the group **[\n \r \u2028 \u2029 \u0085]** (those are considered single characters to choose from)
    ? 0 or 1 times
    

    Regex is a very powerful tool. If you need to search specific pattern in a string, I suggest you to learn it.