CodeGym /Java Blog /무작위의 /자바 스캐너 클래스
John Squirrels
레벨 41
San Francisco

자바 스캐너 클래스

무작위의 그룹에 게시되었습니다
안녕! 오늘 우리의 수업은 특별할 것입니다! 오늘 수업에서는 Java 스캐너 클래스에 대해 이야기하겠습니다. 이전에는 작업을 완료하고 프로그램을 작성하는 과정이 간단했습니다. 코드를 작성하고 main ()방법을 사용하면 프로그램이 필요한 작업을 수행하고 작업이 완료됩니다. 그러나 이제 모든 것이 바뀔 것입니다! 오늘 우리는 프로그램과 실제로 상호 작용하는 방법을 배울 것입니다. 우리의 행동에 반응하는 방법을 프로그램에 가르칠 것입니다! 코드 분석을 시작하기 전에 스캐너와 같은 장치를 다루어야 했던 적이 있습니까? 아마. 스캐너의 내부는 매우 복잡하지만 작동 방식에 대한 기본 아이디어는 매우 간단합니다. 사용자가 제공하는 데이터(예: 여권 또는 보험 증서)를 읽고 이 정보를 메모리에 저장합니다(예: 이미지로). ). 오늘은 나만의 스캐너를 만들 것입니다! 물론 종이 문서는 처리할 수 없지만 텍스트는 문제 없습니다 :) Let's go!

자바의 스캐너 클래스

스캐너 클래스 - 1무엇보다 먼저 java.util.Scanner 클래스 에 익숙해져야 합니다 . 그 기능은 매우 간단합니다. 실제 스캐너와 마찬가지로 지정한 소스에서 데이터를 읽습니다. 예를 들어 문자열, 파일, 콘솔입니다. 다음으로 정보를 인식하고 적절하게 처리합니다. 가장 간단한 예는 다음과 같습니다.

public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       String s = scanner.nextLine();
       System.out.println(s);
   }
}
스캐너 객체를 생성하고 데이터 소스(텍스트 문자열)를 지정했습니다. nextLine () 메서드는 데이터 소스(4행렬이 있는 텍스트)에 액세스하고 읽지 않은 다음 줄(이 경우 첫 번째 줄)을 찾아 반환합니다. 그런 다음 콘솔에 표시합니다. 콘솔 출력:

It matters not how strait the gate,
nextLine() 메서드를 여러 번 사용하여 전체 시 발췌문을 표시할 수 있습니다.

public class Main {

   public static void main(String[] args) {

       Scanner scanner = new Scanner("It matters not how strait the gate,\n" +
               "How charged with punishments the scroll,\n" +
               "I am the master of my fate,\n" +
               "I am the captain of my soul");
       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);
   }
}
매번 우리 스캐너는 한 걸음 앞으로 나아가 다음 줄을 읽습니다. 프로그램의 출력이 표시됩니다.

It matters not how strait the gate, 
How charged with punishments the scroll, 
I am the master of my fate, 
I am the captain of my soul
이미 말했듯이 스캐너의 데이터 소스는 문자열일 필요가 없습니다. 예를 들어 콘솔이 될 수 있습니다. 몇 가지 흥미로운 소식이 있습니다. 이전에는 데이터를 표시하기만 했지만 이제는 키보드에서 데이터를 읽습니다! 스캐너 클래스가 수행하는 다른 작업을 살펴보겠습니다 .

public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
nextInt () 메서드는 입력된 숫자를 읽고 반환합니다. 우리 프로그램에서는 이를 사용하여 변수 번호 에 값을 할당합니다 . 이미 실제 스캐너와 같습니다! 프로그램은 사용자에게 숫자를 입력하도록 요청합니다. 사용자가 이 작업을 수행한 후 프로그램은 사용자에게 감사를 표시하고 결과를 표시한 다음 종료합니다. 그러나 여전히 심각한 문제가 있습니다. 사용자가 실수를 하고 잘못된 것을 입력할 수 있습니다. 다음은 현재 프로그램이 작동을 멈추는 예입니다.

public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);

   }
}
숫자 대신 문자열 "CodeGym"을 입력해 보겠습니다. 콘솔 출력:

Enter a number: 
CodeGym 
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
어 오. 큰일 났습니다 -_- 이런 상황을 피하기 위해서는 사용자가 입력한 데이터를 확인할 수 있는 방법이 필요합니다. 예를 들어 사용자가 숫자 이외의 것을 입력하면 입력한 정보가 숫자가 아니라는 경고를 표시하는 것이 좋습니다. 정보가 괜찮다면 확인할 수 있습니다. 그러나 이것은 우리의 흐름에 무엇이 올지 보기 위해 "미래를 내다보아야" 합니다. 스캐너가 이 작업을 수행 할 수 있습니까 ? 그리고 어떻게! 그리고 이를 수행하기 위한 많은 메서드가 있습니다. 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 a number:");

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

   }
}
이제 우리 프로그램은 입력된 다음 문자가 숫자인지 확인합니다. 그리고 그럴 경우에만 확인을 표시합니다. 입력이 검사를 통과하지 못하면 프로그램은 기록하고 사용자에게 다시 시도하도록 요청합니다. 기본적으로 스캐너 개체와 통신하여 어떤 데이터 유형이 기다리고 있는지 미리 확인할 수 있습니다. 숫자, 문자열 또는 다른 것? 숫자? 그리고 어떤 종류? int , short , long ?" 이 유연성은 사용자의 행동에 따라 프로그램 로직을 구축할 수 있는 기회를 제공합니다. 또 다른 중요한 메서드인 useDelimiter() 를 기록해 두어야 합니다. 이 메서드에 문자열을 전달합니다. 문자열에는 다음이 포함됩니다. 구분 기호 또는 구분 기호로 사용하려는 문자. 예를 들어, 우리가 갑자기 일본 시에 관심을 갖게 되었고 위대한 시인 Matsuo Bashō가 쓴 하이쿠를 읽기 위해 스캐너를 사용하기로 결정했다고 가정해 보겠습니다. 세 개의 다른 구절이 하나의 어색한 문자열로 전달되더라도 쉽게 분할하여 아름답게 렌더링할 수 있습니다.

public class Main {
   public static void main(String[] args) {
       Scanner scan = new Scanner("On a withered branch'" +
               "A crow has alighted.'" +
               "Nightfall in autumn." +
               "''***''" +
               "Such a moon above,'" +
               "Like a tree cut at the root:'" +
               "he fresh cut is white." +
               "''***''" +
               "How the river floods!'" +
               "A heron wanders on short legs,'" +
               "Knee-deep in the water.");

       scan.useDelimiter("'");

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

       scan.close();
   }
}
구분 기호로 "\ n /*/*/*" (개행 문자 및 세 개의 별표)를 사용합니다 . 결과적으로 책에서와 같이 아름다운 콘솔 출력을 얻을 수 있습니다.
On a withered branch 
A crow has alighted. 
Nightfall in autumn. 

*** 

Such a moon above, 
Like a tree cut at the root: 
The fresh cut is white. 

*** 

How the river floods! 
A heron wanders on short legs, 
Knee-deep in the water.
이 예제에는 우리가 절대적으로 지적해야 할 메서드가 하나 더 있습니다: close() . I/O 스트림으로 작업하는 모든 개체와 마찬가지로 스캐너는 작업이 완료되면 닫아야 컴퓨터 리소스를 더 이상 사용하지 않습니다. close() 메서드를 잊지 마세요 !

public class Main {

   public static void main(String[] args) {

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

       int number = sc.nextInt();

       System.out.println("Thanks! You entered the number " + number);
      
       sc.close(); // Now we've done everything right!

   }
}
그게 다야! 보시다시피 스캐너 클래스는 매우 유용하기 때문에 사용하기가 매우 쉽습니다! :) 배운 내용을 보강하려면 Java 과정에서 비디오 강의를 시청하는 것이 좋습니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION