JavaRush /Java Blog /Random-KO /Java의 스캐너 클래스

Java의 스캐너 클래스

Random-KO 그룹에 게시되었습니다
안녕하세요! 오늘 우리 수업은 특별할 거예요! 이전에는 문제를 해결하고 프로그램을 작성할 때 알고리즘이 간단했습니다. 코드를 작성하고 main() 메소드를 실행하면 프로그램이 필요한 작업을 수행하고 종료됩니다. 하지만 이제 모든 것이 바뀔 것입니다! 오늘 우리는 프로그램과 진정으로 상호 작용하는 방법을 배울 것입니다. 우리는 프로그램이 우리의 행동에 반응하도록 가르칠 것입니다! 당신은 이미 우리가 이것으로 어디로 가는지 이해하고 있을 것입니다. 우리는 이번 강의를 Java 언어 클래스 중 하나인 Scanner에 대한 자세한 분석에 집중할 것입니다. 이 클래스는 사용자가 입력하는 데이터를 읽어야 하는 경우 유용합니다. 코드를 배우기 전에 스캐너와 같은 장치를 본 적이 있습니까? 물론이죠. 스캐너의 내부 구조는 매우 복잡하지만 작업의 본질은 매우 간단합니다. 사용자가 입력하는 데이터(예: 여권 또는 보험 증권)를 읽고 읽은 정보를 메모리에 저장합니다(예: , 이미지 형식). 그래서 오늘은 여러분만의 스캐너를 만들어 보겠습니다! 물론 문서는 다루지 못하지만, 텍스트 정보는 꽤 잘 다룰 수 있어요 :) 가자!스캐너 클래스 - 1

자바 스캐너 클래스

우리가 알아야 할 첫 번째이자 가장 중요한 것은 수업입니다 java.util.Scanner. 그 기능은 매우 간단합니다. 실제 스캐너와 마찬가지로 사용자가 지정한 소스에서 데이터를 읽습니다. 예를 들어 라인, 파일, 콘솔에서. 그런 다음 이 정보를 인식하고 필요에 따라 처리합니다. 가장 간단한 예를 들어 보겠습니다.
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("I love you, Petra creation,\n" +
               "I love your stern, slim look,\n" +
               "Neva sovereign current,\n" +
               "Coastal granite");
       String s = scanner.nextLine();
       System.out.println(s);
   }
}
스캐너 개체를 만들고 이에 대한 데이터 소스(텍스트가 포함된 문자열)를 지정했습니다. 이 메서드는 nextLine()데이터 소스(quatrains가 포함된 텍스트)에 액세스하고 아직 읽지 않은 다음 줄(우리의 경우 첫 번째 줄)을 찾아서 반환합니다. 그런 다음 이를 콘솔에 출력합니다. 콘솔 출력:

Люблю тебя, Peterа творенье,
이 방법을 nextLine()여러 번 사용하여 시 전체를 출력할 수 있습니다.
public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("I love you, Petra creation,\n" +
               "I love your stern, slim look,\n" +
               "Neva sovereign current,\n" +
               "Coastal granite");
       String s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
       s = scanner.nextLine();
       System.out.println(s);
   }
}
매번 스캐너는 한 단계 앞으로 나아가서 다음 줄을 읽습니다. 프로그램 결과가 콘솔에 출력됩니다.

Люблю тебя, Peterа творенье,
Люблю твой строгий, стройный вид,
Невы державное теченье,
Береговой ее гранит
이미 말했듯이 스캐너의 데이터 소스는 문자열일 뿐만 아니라 예를 들어 콘솔일 수도 있습니다. 우리에게 중요한 소식: 이전에는 거기에 데이터만 출력했다면 이제는 키보드에서 데이터를 입력하게 됩니다! Scanner 클래스가 수행할 수 있는 다른 작업을 살펴보겠습니다 .
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter the number:");

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

   }
}
메소드는 nextInt()입력된 숫자를 읽고 반환합니다. 우리 프로그램에서는 변수에 값을 할당하는 데 사용됩니다 number. 이것은 실제 스캐너와 더 비슷해 보입니다! 프로그램은 사용자에게 한 줄에 숫자를 입력하도록 요청합니다. 사용자가 이 작업을 수행한 후 프로그램은 그에게 감사를 표시하고 작업 결과를 콘솔에 표시한 후 종료됩니다. 그러나 우리에게는 여전히 심각한 문제가 하나 남아 있습니다. 사용자가 실수를 해서 잘못된 내용을 입력할 수도 있습니다. 다음은 현재 프로그램이 작동을 멈추는 경우의 예입니다.
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter the number:");

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

   }
}
숫자 대신 "JavaRush"라는 문자열을 입력해 보겠습니다. 콘솔 출력:
Enter the number:
JavaRush
Exception in thread "main" java.util.InputMismatchException
  at java.util.Scanner.throwFor(Scanner.java:864)
  at java.util.Scanner.next(Scanner.java:1485)
  at java.util.Scanner.nextInt(Scanner.java:2117)
  at java.util.Scanner.nextInt(Scanner.java:2076)
  at Main.main(Main.java:10)

Process finished with exit code 1
아, 다 나쁜데 -_- 이런 상황을 피하기 위해서는 사용자가 입력하는 데이터의 유효성을 검사할 수 있는 방법이 필요합니다. 예를 들어, 사용자가 숫자가 아닌 다른 것을 입력하면, 입력한 정보가 숫자가 아니라는 경고를 콘솔에 표시하고, 모든 것이 정상이면 확인 텍스트를 표시하는 것이 좋을 것입니다. 하지만 이를 위해서는 실제로 "미래를 내다보아야" 합니다. 즉, 흐름에서 다음 단계가 무엇인지 알아내는 것입니다. Java의 Scanner가 이를 수행할 수 있습니까? 어떻게 그럴 수 있겠는가! 이를 위해 전체 메소드 그룹이 있습니다. hasNextInt()- 이 메소드는 입력된 데이터의 다음 부분이 숫자인지 여부를 확인합니다(각각 true 또는 false를 반환함). hasNextLine()— 다음 데이터 조각이 문자열인지 확인합니다. hasNextByte(), hasNextShort(), hasNextLong(), hasNextFloat(), hasNextDouble()- 이 모든 메소드는 다른 데이터 유형에 대해 동일하게 수행됩니다. 숫자를 읽도록 프로그램을 변경해 보겠습니다.
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter the number:");

       if (sc.hasNextInt()) {
           int number = sc.nextInt();
           System.out.println("Thank you! You entered a number" + number);
       } else {
           System.out.println("Sorry, but this is clearly not a number. Restart the program and try again!");
       }

   }
}
이제 우리 프로그램은 입력된 다음 문자가 숫자인지 아닌지를 확인합니다. 그리고 그럴 경우에만 확인 메시지가 표시됩니다. 입력이 테스트를 통과하지 못하면 프로그램은 이를 인지하고 다시 시도하도록 요청합니다. 기본적으로 Scanner 개체와 통신할 수 있으며 예상되는 데이터 유형을 미리 알 수 있습니다. “안녕, 스캐너야, 다음은 뭐야? 숫자, 문자열 또는 다른 것? 숫자? 그리고 어느 것이 - int, short, long?” 이러한 유연성 덕분에 사용자 행동에 따라 프로그램 논리를 구축할 수 있는 기회가 제공됩니다. 주목할 가치가 있는 또 다른 중요한 방법은 useDelimiter(). 이 메소드에는 구분 기호로 사용하려는 문자열이 전달됩니다. 예를 들어, 우리는 갑자기 일본 시에 관심을 가지게 되었고, 스캐너를 사용하여 위대한 시인 마츠오 바쇼(Matsuo Basho)의 여러 하이쿠를 읽기로 결정했습니다. 세 개의 서로 다른 구절이 하나의 서투른 줄에 주어진다 할지라도 우리는 쉽게 그것들을 분리하고 멋지게 형식을 지정할 수 있습니다:
public class Main {
   public static void main(String[] args) {
       Scanner scan = new Scanner("On a Bare Branch" +
               "Raven sits alone.'" +
               "Autumn evening." +
               "''***''" +
               "There's such a moon in the sky,'" +
               "Like a tree cut down at the root:'" +
               "A fresh cut turns white." +
               "''***''" +
               "How the river has overflowed!" +
               "The heron wanders on short legs,'" +
               "Knee-deep in water.");

       scan.useDelimiter("'");

       while (scan.hasNext()) {
           System.out.println(scan.next());
       }

       scan.close();
   }
}
Scanner 클래스 의 useDelimeter() 메서드를 줄 구분 기호로 사용합니다 . 들어오는 데이터를 여러 부분으로 나누는 역할을 합니다. 우리의 경우 작은따옴표( "'" ) 가 인수로 전달되어 문자열을 구분하는 데 사용됩니다 . 이 인용문 뒤의 텍스트는 while 루프에서 System 클래스 의 println() 메서드를 사용 하여 데이터를 읽기 때문에 새 줄에 나타납니다. 결과적으로 책에서와 마찬가지로 콘솔에 아름다운 출력이 표시됩니다.
На голой ветке
Ворон сидит одиноко.
Осенний вечер.

*** 
 
В небе такая луна,
Словно дерево спилено под корень:
Белеет свежий срез.

*** 
 
Как разлилась река!
Цапля бредет на коротких ножках,
По колено в воде.
같은 예에서 반드시 주의해야 할 방법이 하나 더 있습니다 close(). I/O 스트림과 함께 작동하는 모든 개체와 마찬가지로 스캐너는 더 이상 컴퓨터 리소스를 소비하지 않도록 작업이 완료되면 닫혀야 합니다. 방법을 절대 잊지 마세요 close()!
public class Main {

   public static void main(String[] args) {

       Scanner sc = new Scanner(System.in);
       System.out.println("Enter the number:");

       int number = sc.nextInt();

       System.out.println("Thank you! You entered a number" + number);

       sc.close();//Now we did everything right!

   }
}
그게 다야! 보시다시피 Scanner 클래스는 사용하기 매우 쉽고 매우 유용합니다! :)
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION